KurtYoung commented on a change in pull request #7816: [FLINK-11701][table-planner-blink] Introduce an abstract set of data formats URL: https://github.com/apache/flink/pull/7816#discussion_r261456020
########## File path: flink-table/flink-table-runtime-blink/src/main/java/org/apache/flink/table/dataformat/BinaryFormat.java ########## @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.flink.table.dataformat; + +import org.apache.flink.core.memory.MemorySegment; +import org.apache.flink.table.util.SegmentsUtil; + +/** + * Binary format that in {@link MemorySegment}s. + */ +public abstract class BinaryFormat<T> { + + private static final long HIGHEST_FIRST_BIT = Long.MIN_VALUE; + private static final long HIGHEST_SECOND_TO_EIGHTH_BIT = 0x7FL << 56; + + protected MemorySegment[] segments; + protected int offset; + protected int sizeInBytes; + + public BinaryFormat() {} + + public BinaryFormat(MemorySegment[] segments, int offset, int sizeInBytes) { + this.segments = segments; + this.offset = offset; + this.sizeInBytes = sizeInBytes; + } + + public MemorySegment[] getSegments() { + return segments; + } + + public int getOffset() { + return offset; + } + + public int getSizeInBytes() { + return sizeInBytes; + } + + @Override + public boolean equals(Object o) { + return this == o || o != null && + getClass() == o.getClass() && + binaryEquals((BinaryFormat) o); + } + + public boolean binaryEquals(BinaryFormat that) { + return sizeInBytes == that.sizeInBytes && + SegmentsUtil.equals(segments, offset, that.segments, that.offset, sizeInBytes); + } + + /** + * Get binary string, if length less than 8, will be include in variablePartOffsetAndSize. + * + * <p>If length is less than 8, its binary format is: + * 1bit mark(1), 7bits length, and 7bytes data. Review comment: Could you explain what is mark for? ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: [email protected] With regards, Apache Git Services
