This is an automated email from the ASF dual-hosted git repository.
nizhikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 79f5f665a02 IGNITE-25090 Move BinaryUtils methods to binary-impl
(#12636) (#13568)
79f5f665a02 is described below
commit 79f5f665a024d046b8fea521a76c529ac8caeb6f
Author: Nikolay <[email protected]>
AuthorDate: Thu Sep 24 13:23:43 2026 +0300
IGNITE-25090 Move BinaryUtils methods to binary-impl (#12636) (#13568)
---
.../ignite/internal/binary/BinaryObjectEx.java | 5 +
.../internal/binary/BinaryReaderHandlesHolder.java | 7 -
.../binary/BinaryReaderHandlesHolderImpl.java | 5 -
.../apache/ignite/internal/binary/BinaryUtils.java | 525 ---------------------
.../binary/BinaryArrayIdentityResolver.java | 2 +-
.../ignite/internal/binary/BinaryImplUtils.java | 520 ++++++++++++++++++++
.../ignite/internal/binary/BinaryObjectImpl.java | 28 +-
.../internal/binary/BinaryObjectOffheapImpl.java | 20 +-
.../ignite/internal/binary/BinaryReaderExImpl.java | 39 +-
.../ignite/internal/binary/BinaryWriterExImpl.java | 18 +-
.../internal/binary/BinaryWriterSchemaHolder.java | 12 +-
.../binary/CrossObjectReferenceResolver.java | 24 +-
.../ignite/internal/binary/ObjectDetachHelper.java | 4 +-
.../binary/builder/BinaryBuilderReader.java | 3 +-
.../binary/builder/BinaryBuilderSerializer.java | 5 +-
.../binary/builder/BinaryObjectBuilderImpl.java | 35 +-
.../processors/cache/verify/IdleVerifyUtility.java | 3 +-
.../ignite/client/BinaryConfigurationTest.java | 2 +-
.../BinarySerialiedFieldComparatorSelfTest.java | 4 +-
.../binary/BinarySerializedFieldComparator.java | 6 +-
.../internal/metric/MetricsConfigurationTest.java | 2 +-
.../apache/ignite/testframework/GridTestUtils.java | 40 ++
22 files changed, 673 insertions(+), 636 deletions(-)
diff --git
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
index f8e5c067810..f5d8d61d62e 100644
---
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
+++
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
@@ -141,4 +141,9 @@ public interface BinaryObjectEx extends BinaryObject {
public default boolean hasCircularReferences() {
return false;
}
+
+ /** @return {@code true} if binary object has compact footer. */
+ public default boolean isCompactFooter() {
+ return false;
+ }
}
diff --git
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryReaderHandlesHolder.java
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryReaderHandlesHolder.java
index 01c05e97dfb..5308d9e0766 100644
---
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryReaderHandlesHolder.java
+++
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryReaderHandlesHolder.java
@@ -21,13 +21,6 @@ package org.apache.ignite.internal.binary;
* Holder for handles.
*/
interface BinaryReaderHandlesHolder {
- /**
- * Set handle.
- *
- * @param obj Object.
- */
- public void setHandle(Object obj);
-
/**
* Set handle.
*
diff --git
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryReaderHandlesHolderImpl.java
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryReaderHandlesHolderImpl.java
index 0d1c0cd3b91..6adb2f2f1a7 100644
---
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryReaderHandlesHolderImpl.java
+++
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryReaderHandlesHolderImpl.java
@@ -24,11 +24,6 @@ class BinaryReaderHandlesHolderImpl implements
BinaryReaderHandlesHolder {
/** Handles. */
private BinaryReaderHandles hnds;
- /** {@inheritDoc} */
- @Override public void setHandle(Object obj) {
- throw new UnsupportedOperationException();
- }
-
/** {@inheritDoc} */
@Override public void setHandle(Object obj, int pos) {
handles().put(pos, obj);
diff --git
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
index cabf276f834..d3585cb869c 100644
---
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
+++
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
@@ -38,7 +38,6 @@ import java.nio.charset.StandardCharsets;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
@@ -86,7 +85,6 @@ import org.apache.ignite.internal.util.MutableSingletonList;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.T2;
import org.apache.ignite.internal.util.typedef.internal.A;
-import org.apache.ignite.lang.IgniteBiTuple;
import org.apache.ignite.lang.IgniteUuid;
import org.apache.ignite.logger.NullLogger;
import org.apache.ignite.marshaller.Marshallers;
@@ -131,49 +129,12 @@ public class BinaryUtils {
TreeSet.class, new BinaryTreeSetWriteReplacer()
);
- /** {@code true} if serialized value of this type cannot contain
references to objects. */
- private static final boolean[] PLAIN_TYPE_FLAG = new boolean[102];
-
/** Binary classes. */
private static final Collection<Class<?>> BINARY_CLS;
/** Class for SingletonList obtained at runtime. */
static final Class<? extends Collection> SINGLETON_LIST_CLS =
Collections.singletonList(null).getClass();
- /** Flag: user type. */
- static final short FLAG_USR_TYP = 0x0001;
-
- /** Flag: only raw data exists. */
- static final short FLAG_HAS_SCHEMA = 0x0002;
-
- /** Flag indicating that object has raw data. */
- static final short FLAG_HAS_RAW = 0x0004;
-
- /** Flag: offsets take 1 byte. */
- static final short FLAG_OFFSET_ONE_BYTE = 0x0008;
-
- /** Flag: offsets take 2 bytes. */
- static final short FLAG_OFFSET_TWO_BYTES = 0x0010;
-
- /** Flag: compact footer, no field IDs. */
- public static final short FLAG_COMPACT_FOOTER = 0x0020;
-
- /** Flag: raw data contains .NET type information. Always 0 in Java. Keep
it here for information only. */
- @SuppressWarnings("unused")
- public static final short FLAG_CUSTOM_DOTNET_TYPE = 0x0040;
-
- /** Offset which fits into 1 byte. */
- static final int OFFSET_1 = 1;
-
- /** Offset which fits into 2 bytes. */
- static final int OFFSET_2 = 2;
-
- /** Offset which fits into 4 bytes. */
- static final int OFFSET_4 = 4;
-
- /** Field ID length. */
- static final int FIELD_ID_LEN = 4;
-
/** Whether to sort field in binary objects (doesn't affect
Binarylizable). */
public static boolean FIELDS_SORTED_ORDER =
IgniteCommonsSystemProperties.getBoolean(IgniteCommonsSystemProperties.IGNITE_BINARY_SORT_OBJECT_FIELDS);
@@ -272,19 +233,6 @@ public class BinaryUtils {
BINARY_CLS = Set.copyOf(FLAG_TO_CLASS.values());
- for (byte b : new byte[] {
- GridBinaryMarshaller.BYTE, GridBinaryMarshaller.SHORT,
GridBinaryMarshaller.INT, GridBinaryMarshaller.LONG,
- GridBinaryMarshaller.FLOAT, GridBinaryMarshaller.DOUBLE,
GridBinaryMarshaller.CHAR, GridBinaryMarshaller.BOOLEAN,
- GridBinaryMarshaller.DECIMAL, GridBinaryMarshaller.STRING,
GridBinaryMarshaller.UUID, GridBinaryMarshaller.DATE,
- GridBinaryMarshaller.TIMESTAMP, GridBinaryMarshaller.TIME,
GridBinaryMarshaller.BYTE_ARR, GridBinaryMarshaller.SHORT_ARR,
- GridBinaryMarshaller.INT_ARR, GridBinaryMarshaller.LONG_ARR,
GridBinaryMarshaller.FLOAT_ARR, GridBinaryMarshaller.DOUBLE_ARR,
- GridBinaryMarshaller.TIME_ARR, GridBinaryMarshaller.CHAR_ARR,
GridBinaryMarshaller.BOOLEAN_ARR,
- GridBinaryMarshaller.DECIMAL_ARR, GridBinaryMarshaller.STRING_ARR,
GridBinaryMarshaller.UUID_ARR, GridBinaryMarshaller.DATE_ARR,
- GridBinaryMarshaller.TIMESTAMP_ARR, GridBinaryMarshaller.ENUM,
GridBinaryMarshaller.ENUM_ARR, GridBinaryMarshaller.NULL}) {
-
- PLAIN_TYPE_FLAG[b] = true;
- }
-
FIELD_TYPE_NAMES = new String[104];
FIELD_TYPE_NAMES[GridBinaryMarshaller.BYTE] = "byte";
@@ -326,57 +274,6 @@ public class BinaryUtils {
FIELD_TYPE_NAMES[GridBinaryMarshaller.BINARY_ENUM] = "Enum";
}
- /**
- * Check if user type flag is set.
- *
- * @param flags Flags.
- * @return {@code True} if set.
- */
- static boolean isUserType(short flags) {
- return isFlagSet(flags, FLAG_USR_TYP);
- }
-
- /**
- * Check if raw-only flag is set.
- *
- * @param flags Flags.
- * @return {@code True} if set.
- */
- public static boolean hasSchema(short flags) {
- return isFlagSet(flags, FLAG_HAS_SCHEMA);
- }
-
- /**
- * Check if raw-only flag is set.
- *
- * @param flags Flags.
- * @return {@code True} if set.
- */
- static boolean hasRaw(short flags) {
- return isFlagSet(flags, FLAG_HAS_RAW);
- }
-
- /**
- * Check if "no-field-ids" flag is set.
- *
- * @param flags Flags.
- * @return {@code True} if set.
- */
- static boolean isCompactFooter(short flags) {
- return isFlagSet(flags, FLAG_COMPACT_FOOTER);
- }
-
- /**
- * Check whether particular flag is set.
- *
- * @param flags Flags.
- * @param flag Flag.
- * @return {@code True} if flag is set in flags.
- */
- static boolean isFlagSet(short flags, short flag) {
- return (flags & flag) == flag;
- }
-
/**
* Schema initial ID.
*
@@ -417,172 +314,6 @@ public class BinaryUtils {
return FIELD_TYPE_NAMES[typeId];
}
- /**
- * Write value with flag. e.g. writePlainObject(writer, (byte)77) will
write two byte: {BYTE, 77}.
- *
- * @param writer W
- * @param val Value.
- */
- public static void writePlainObject(BinaryWriterEx writer, Object val) {
- Byte flag = PLAIN_CLASS_TO_FLAG.get(val.getClass());
-
- if (flag == null)
- throw new IllegalArgumentException("Can't write object with type:
" + val.getClass());
-
- switch (flag) {
- case GridBinaryMarshaller.BYTE:
- writer.writeByte(flag);
- writer.writeByte((Byte)val);
-
- break;
-
- case GridBinaryMarshaller.SHORT:
- writer.writeByte(flag);
- writer.writeShort((Short)val);
-
- break;
-
- case GridBinaryMarshaller.INT:
- writer.writeByte(flag);
- writer.writeInt((Integer)val);
-
- break;
-
- case GridBinaryMarshaller.LONG:
- writer.writeByte(flag);
- writer.writeLong((Long)val);
-
- break;
-
- case GridBinaryMarshaller.FLOAT:
- writer.writeByte(flag);
- writer.writeFloat((Float)val);
-
- break;
-
- case GridBinaryMarshaller.DOUBLE:
- writer.writeByte(flag);
- writer.writeDouble((Double)val);
-
- break;
-
- case GridBinaryMarshaller.CHAR:
- writer.writeByte(flag);
- writer.writeChar((Character)val);
-
- break;
-
- case GridBinaryMarshaller.BOOLEAN:
- writer.writeByte(flag);
- writer.writeBoolean((Boolean)val);
-
- break;
-
- case GridBinaryMarshaller.DECIMAL:
- writer.writeDecimal((BigDecimal)val);
-
- break;
-
- case GridBinaryMarshaller.STRING:
- writer.writeString((String)val);
-
- break;
-
- case GridBinaryMarshaller.UUID:
- writer.writeUuid((UUID)val);
-
- break;
-
- case GridBinaryMarshaller.DATE:
- writer.writeDate((Date)val);
-
- break;
-
- case GridBinaryMarshaller.TIMESTAMP:
- writer.writeTimestamp((Timestamp)val);
-
- break;
-
- case GridBinaryMarshaller.TIME:
- writer.writeTime((Time)val);
-
- break;
-
- case GridBinaryMarshaller.BYTE_ARR:
- writer.writeByteArray((byte[])val);
-
- break;
-
- case GridBinaryMarshaller.SHORT_ARR:
- writer.writeShortArray((short[])val);
-
- break;
-
- case GridBinaryMarshaller.INT_ARR:
- writer.writeIntArray((int[])val);
-
- break;
-
- case GridBinaryMarshaller.LONG_ARR:
- writer.writeLongArray((long[])val);
-
- break;
-
- case GridBinaryMarshaller.FLOAT_ARR:
- writer.writeFloatArray((float[])val);
-
- break;
-
- case GridBinaryMarshaller.DOUBLE_ARR:
- writer.writeDoubleArray((double[])val);
-
- break;
-
- case GridBinaryMarshaller.CHAR_ARR:
- writer.writeCharArray((char[])val);
-
- break;
-
- case GridBinaryMarshaller.BOOLEAN_ARR:
- writer.writeBooleanArray((boolean[])val);
-
- break;
-
- case GridBinaryMarshaller.DECIMAL_ARR:
- writer.writeDecimalArray((BigDecimal[])val);
-
- break;
-
- case GridBinaryMarshaller.STRING_ARR:
- writer.writeStringArray((String[])val);
-
- break;
-
- case GridBinaryMarshaller.UUID_ARR:
- writer.writeUuidArray((UUID[])val);
-
- break;
-
- case GridBinaryMarshaller.DATE_ARR:
- writer.writeDateArray((Date[])val);
-
- break;
-
- case GridBinaryMarshaller.TIMESTAMP_ARR:
- writer.writeTimestampArray((Timestamp[])val);
-
- break;
-
- case GridBinaryMarshaller.TIME_ARR:
- writer.writeTimeArray((Time[])val);
-
- break;
-
- default:
- throw new IllegalArgumentException("Can't write object with
type: " + val.getClass());
- }
- }
-
/**
* @param obj Value to unwrap.
* @return Unwrapped value.
@@ -594,24 +325,6 @@ public class BinaryUtils {
return obj;
}
- /**
- * @return {@code true} if content of serialized value cannot contain
references to other object.
- */
- public static boolean isPlainType(int type) {
- return type > 0 && type < PLAIN_TYPE_FLAG.length &&
PLAIN_TYPE_FLAG[type];
- }
-
- /**
- * Checks whether an array type values can or can not contain references
to other object.
- *
- * @param type Array type.
- * @return {@code true} if content of serialized array value cannot
contain references to other object.
- */
- public static boolean isPlainArrayType(int type) {
- return (type >= GridBinaryMarshaller.BYTE_ARR && type <=
GridBinaryMarshaller.DATE_ARR)
- || type == GridBinaryMarshaller.TIMESTAMP_ARR || type ==
GridBinaryMarshaller.TIME_ARR;
- }
-
/**
* @param cls Class.
* @return Binary field type.
@@ -784,160 +497,6 @@ public class BinaryUtils {
return in.readIntPositioned(start +
GridBinaryMarshaller.TOTAL_LEN_POS);
}
- /** */
- static int dataStartRelative(BinaryPositionReadable in, int start) {
- int typeId = in.readIntPositioned(start +
GridBinaryMarshaller.TYPE_ID_POS);
-
- if (typeId == GridBinaryMarshaller.UNREGISTERED_TYPE_ID) {
- // Gets the length of the type name which is stored as string.
- int len = in.readIntPositioned(start +
GridBinaryMarshaller.DFLT_HDR_LEN + /** object type */1);
-
- return GridBinaryMarshaller.DFLT_HDR_LEN + /** object type */1 +
/** string length */ 4 + len;
- }
- else
- return GridBinaryMarshaller.DFLT_HDR_LEN;
- }
-
- /**
- * Get footer start of the object.
- *
- * @param in Input stream.
- * @param start Object start position inside the stream.
- * @return Footer start.
- */
- private static int footerStartRelative(BinaryPositionReadable in, int
start) {
- short flags = in.readShortPositioned(start +
GridBinaryMarshaller.FLAGS_POS);
-
- if (hasSchema(flags))
- // Schema exists, use offset.
- return in.readIntPositioned(start +
GridBinaryMarshaller.SCHEMA_OR_RAW_OFF_POS);
- else
- // No schema, footer start equals to object end.
- return length(in, start);
- }
-
- /**
- * Get object's footer.
- *
- * @param in Input stream.
- * @param start Start position.
- * @return Footer start.
- */
- public static int footerStartAbsolute(BinaryPositionReadable in, int
start) {
- return footerStartRelative(in, start) + start;
- }
-
- /**
- * Get object's footer.
- *
- * @param in Input stream.
- * @param start Start position.
- * @return Footer.
- */
- public static IgniteBiTuple<Integer, Integer>
footerAbsolute(BinaryPositionReadable in, int start) {
- short flags = in.readShortPositioned(start +
GridBinaryMarshaller.FLAGS_POS);
-
- int footerEnd = length(in, start);
-
- if (hasSchema(flags)) {
- // Schema exists.
- int footerStart = in.readIntPositioned(start +
GridBinaryMarshaller.SCHEMA_OR_RAW_OFF_POS);
-
- if (hasRaw(flags))
- footerEnd -= 4;
-
- assert footerStart <= footerEnd;
-
- return F.t(start + footerStart, start + footerEnd);
- }
- else
- // No schema.
- return F.t(start + footerEnd, start + footerEnd);
- }
-
- /**
- * Get relative raw offset of the object.
- *
- * @param in Input stream.
- * @param start Object start position inside the stream.
- * @return Raw offset.
- */
- private static int rawOffsetRelative(BinaryPositionReadable in, int start)
{
- short flags = in.readShortPositioned(start +
GridBinaryMarshaller.FLAGS_POS);
-
- int len = length(in, start);
-
- if (hasSchema(flags)) {
- // Schema exists.
- if (hasRaw(flags))
- // Raw offset is set, it is at the very end of the object.
- return in.readIntPositioned(start + len - 4);
- else
- // Raw offset is not set, so just return schema offset.
- return in.readIntPositioned(start +
GridBinaryMarshaller.SCHEMA_OR_RAW_OFF_POS);
- }
- else
- // No schema, raw offset is located on schema offset position.
- return in.readIntPositioned(start +
GridBinaryMarshaller.SCHEMA_OR_RAW_OFF_POS);
- }
-
- /**
- * Get absolute raw offset of the object.
- *
- * @param in Input stream.
- * @param start Object start position inside the stream.
- * @return Raw offset.
- */
- public static int rawOffsetAbsolute(BinaryPositionReadable in, int start) {
- return start + rawOffsetRelative(in, start);
- }
-
- /**
- * Get offset length for the given flags.
- *
- * @param flags Flags.
- * @return Offset size.
- */
- public static int fieldOffsetLength(short flags) {
- if ((flags & FLAG_OFFSET_ONE_BYTE) == FLAG_OFFSET_ONE_BYTE)
- return OFFSET_1;
- else if ((flags & FLAG_OFFSET_TWO_BYTES) == FLAG_OFFSET_TWO_BYTES)
- return OFFSET_2;
- else
- return OFFSET_4;
- }
-
- /**
- * Get field ID length.
- *
- * @param flags Flags.
- * @return Field ID length.
- */
- public static int fieldIdLength(short flags) {
- return isCompactFooter(flags) ? 0 : FIELD_ID_LEN;
- }
-
- /**
- * Get relative field offset.
- *
- * @param stream Stream.
- * @param pos Position.
- * @param fieldOffsetSize Field offset size.
- * @return Relative field offset.
- */
- public static int fieldOffsetRelative(BinaryPositionReadable stream, int
pos, int fieldOffsetSize) {
- int res;
-
- if (fieldOffsetSize == OFFSET_1)
- res = (int)stream.readBytePositioned(pos) & 0xFF;
- else if (fieldOffsetSize == OFFSET_2)
- res = (int)stream.readShortPositioned(pos) & 0xFFFF;
- else
- res = stream.readIntPositioned(pos);
-
- return res;
- }
-
/**
* Merge old and new metas.
*
@@ -2705,14 +2264,6 @@ public class BinaryUtils {
);
}
- /**
- * @param val Value to check.
- * @return {@code True} if {@code val} instance of {@link BinaryEnumArray}.
- */
- public static boolean isBinaryEnumArray(Object val) {
- return val instanceof BinaryEnumArray;
- }
-
/**
* @param val Value to check.
* @return {@code True} if {@code val} instance of binary Enum object.
@@ -2733,23 +2284,6 @@ public class BinaryUtils {
return binariesFactory.reader(ctx, in, ldr, forUnmarshal);
}
- /**
- * Creates reader instance.
- *
- * @param ctx Context.
- * @param in Input stream.
- * @param ldr Class loader.
- * @param reader BinaryReaderEx.
- * @param forUnmarshal {@code True} if reader is need to unmarshal object.
- */
- public static BinaryReaderEx reader(BinaryContext ctx,
- BinaryInputStream in,
- ClassLoader ldr,
- BinaryReaderEx reader,
- boolean forUnmarshal) {
- return reader(ctx, in, ldr, reader.handles(), forUnmarshal);
- }
-
/**
* Creates reader instance.
*
@@ -2891,45 +2425,6 @@ public class BinaryUtils {
return ((BinaryObjectExImpl)obj).field(fieldId);
}
- /**
- * Check for arrays equality.
- *
- * @param a1 Value 1.
- * @param a2 Value 2.
- * @return {@code True} if arrays equal.
- */
- public static boolean arrayEq(Object a1, Object a2) {
- if (a1 == a2)
- return true;
-
- if (a1 == null || a2 == null)
- return a1 != null || a2 != null;
-
- if (a1.getClass() != a2.getClass())
- return false;
-
- if (a1 instanceof byte[])
- return Arrays.equals((byte[])a1, (byte[])a2);
- else if (a1 instanceof boolean[])
- return Arrays.equals((boolean[])a1, (boolean[])a2);
- else if (a1 instanceof short[])
- return Arrays.equals((short[])a1, (short[])a2);
- else if (a1 instanceof char[])
- return Arrays.equals((char[])a1, (char[])a2);
- else if (a1 instanceof int[])
- return Arrays.equals((int[])a1, (int[])a2);
- else if (a1 instanceof long[])
- return Arrays.equals((long[])a1, (long[])a2);
- else if (a1 instanceof float[])
- return Arrays.equals((float[])a1, (float[])a2);
- else if (a1 instanceof double[])
- return Arrays.equals((double[])a1, (double[])a2);
- else if (isBinaryArray(a1))
- return a1.equals(a2);
-
- return Arrays.deepEquals((Object[])a1, (Object[])a2);
- }
-
/**
* @param o Object to detach.
* @return Detached object.
@@ -2955,16 +2450,6 @@ public class BinaryUtils {
return F.viewReadOnly(meta.schemas(), s -> new T2<>(s.schemaId(),
s.fieldIds()));
}
- /**
- * Gets field by its order.
- *
- * @param reader Reader.
- * @param order Order.
- */
- public static int fieldId(BinaryReaderEx reader, int order) {
- return reader.getOrCreateSchema().fieldId(order);
- }
-
/**
* @param obj Value.
* @return {@code True} if object is of known immutable type.
@@ -3000,16 +2485,6 @@ public class BinaryUtils {
return new BinaryMetadata(typeId, typeName, fields, affKeyFieldName,
schemas, isEnum, enumMap);
}
- /** */
- public static int hashCode(byte[] data, int startPos, int endPos) {
- int hash = 1;
-
- for (int i = startPos; i < endPos; i++)
- hash = 31 * hash + data[i];
-
- return hash;
- }
-
/**
* Enum type.
*/
diff --git
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolver.java
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolver.java
index 86109b19b62..3603a98c7bb 100644
---
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolver.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolver.java
@@ -57,7 +57,7 @@ class BinaryArrayIdentityResolver extends
BinaryAbstractIdentityResolver {
int end = ex.footerStartOffset();
if (ex.hasBytes())
- return BinaryUtils.hashCode(ex.bytes(), start, end);
+ return BinaryImplUtils.hashCode(ex.bytes(), start, end);
else {
// Handle offheap object.
int hash = 1;
diff --git
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryImplUtils.java
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryImplUtils.java
new file mode 100644
index 00000000000..6d59f0519b5
--- /dev/null
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryImplUtils.java
@@ -0,0 +1,520 @@
+/*
+ * 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.ignite.internal.binary;
+
+import java.math.BigDecimal;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Date;
+import java.util.UUID;
+import org.apache.ignite.internal.binary.streams.BinaryInputStream;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.lang.IgniteBiTuple;
+
+import static
org.apache.ignite.internal.binary.BinaryUtils.PLAIN_CLASS_TO_FLAG;
+import static org.apache.ignite.internal.binary.BinaryUtils.length;
+
+/**
+ * Binary utils used only in implementation.
+ */
+public class BinaryImplUtils {
+ /** Flag: user type. */
+ static final short FLAG_USR_TYP = 0x0001;
+
+ /** Flag: only raw data exists. */
+ static final short FLAG_HAS_SCHEMA = 0x0002;
+
+ /** Flag indicating that object has raw data. */
+ static final short FLAG_HAS_RAW = 0x0004;
+
+ /** Flag: offsets take 1 byte. */
+ static final short FLAG_OFFSET_ONE_BYTE = 0x0008;
+
+ /** Flag: offsets take 2 bytes. */
+ static final short FLAG_OFFSET_TWO_BYTES = 0x0010;
+
+ /** Flag: compact footer, no field IDs. */
+ public static final short FLAG_COMPACT_FOOTER = 0x0020;
+
+ /** Flag: raw data contains .NET type information. Always 0 in Java. Keep
it here for information only. */
+ @SuppressWarnings("unused")
+ public static final short FLAG_CUSTOM_DOTNET_TYPE = 0x0040;
+
+ /** Offset which fits into 1 byte. */
+ static final int OFFSET_1 = 1;
+
+ /** Offset which fits into 2 bytes. */
+ static final int OFFSET_2 = 2;
+
+ /** Offset which fits into 4 bytes. */
+ static final int OFFSET_4 = 4;
+
+ /** Field ID length. */
+ static final int FIELD_ID_LEN = 4;
+
+ /** {@code true} if serialized value of this type cannot contain
references to objects. */
+ private static final boolean[] PLAIN_TYPE_FLAG = new boolean[102];
+
+ static {
+ for (byte b : new byte[] {
+ GridBinaryMarshaller.BYTE, GridBinaryMarshaller.SHORT,
GridBinaryMarshaller.INT, GridBinaryMarshaller.LONG,
+ GridBinaryMarshaller.FLOAT, GridBinaryMarshaller.DOUBLE,
GridBinaryMarshaller.CHAR, GridBinaryMarshaller.BOOLEAN,
+ GridBinaryMarshaller.DECIMAL, GridBinaryMarshaller.STRING,
GridBinaryMarshaller.UUID, GridBinaryMarshaller.DATE,
+ GridBinaryMarshaller.TIMESTAMP, GridBinaryMarshaller.TIME,
GridBinaryMarshaller.BYTE_ARR, GridBinaryMarshaller.SHORT_ARR,
+ GridBinaryMarshaller.INT_ARR, GridBinaryMarshaller.LONG_ARR,
GridBinaryMarshaller.FLOAT_ARR, GridBinaryMarshaller.DOUBLE_ARR,
+ GridBinaryMarshaller.TIME_ARR, GridBinaryMarshaller.CHAR_ARR,
GridBinaryMarshaller.BOOLEAN_ARR,
+ GridBinaryMarshaller.DECIMAL_ARR, GridBinaryMarshaller.STRING_ARR,
GridBinaryMarshaller.UUID_ARR, GridBinaryMarshaller.DATE_ARR,
+ GridBinaryMarshaller.TIMESTAMP_ARR, GridBinaryMarshaller.ENUM,
GridBinaryMarshaller.ENUM_ARR, GridBinaryMarshaller.NULL}) {
+
+ PLAIN_TYPE_FLAG[b] = true;
+ }
+ }
+
+ /**
+ * Check if user type flag is set.
+ *
+ * @param flags Flags.
+ * @return {@code True} if set.
+ */
+ static boolean isUserType(short flags) {
+ return isFlagSet(flags, FLAG_USR_TYP);
+ }
+
+ /**
+ * Check if raw-only flag is set.
+ *
+ * @param flags Flags.
+ * @return {@code True} if set.
+ */
+ public static boolean hasSchema(short flags) {
+ return isFlagSet(flags, FLAG_HAS_SCHEMA);
+ }
+
+ /**
+ * Check if raw-only flag is set.
+ *
+ * @param flags Flags.
+ * @return {@code True} if set.
+ */
+ static boolean hasRaw(short flags) {
+ return isFlagSet(flags, FLAG_HAS_RAW);
+ }
+
+ /**
+ * Check if "no-field-ids" flag is set.
+ *
+ * @param flags Flags.
+ * @return {@code True} if set.
+ */
+ static boolean isCompactFooter(short flags) {
+ return isFlagSet(flags, FLAG_COMPACT_FOOTER);
+ }
+
+ /**
+ * Check whether particular flag is set.
+ *
+ * @param flags Flags.
+ * @param flag Flag.
+ * @return {@code True} if flag is set in flags.
+ */
+ static boolean isFlagSet(short flags, short flag) {
+ return (flags & flag) == flag;
+ }
+
+ /** */
+ static int dataStartRelative(BinaryPositionReadable in, int start) {
+ int typeId = in.readIntPositioned(start +
GridBinaryMarshaller.TYPE_ID_POS);
+
+ if (typeId == GridBinaryMarshaller.UNREGISTERED_TYPE_ID) {
+ // Gets the length of the type name which is stored as string.
+ int len = in.readIntPositioned(start +
GridBinaryMarshaller.DFLT_HDR_LEN + /** object type */1);
+
+ return GridBinaryMarshaller.DFLT_HDR_LEN + /** object type */1 +
/** string length */ 4 + len;
+ }
+ else
+ return GridBinaryMarshaller.DFLT_HDR_LEN;
+ }
+
+ /**
+ * Get footer start of the object.
+ *
+ * @param in Input stream.
+ * @param start Object start position inside the stream.
+ * @return Footer start.
+ */
+ private static int footerStartRelative(BinaryPositionReadable in, int
start) {
+ short flags = in.readShortPositioned(start +
GridBinaryMarshaller.FLAGS_POS);
+
+ if (hasSchema(flags))
+ // Schema exists, use offset.
+ return in.readIntPositioned(start +
GridBinaryMarshaller.SCHEMA_OR_RAW_OFF_POS);
+ else
+ // No schema, footer start equals to object end.
+ return length(in, start);
+ }
+
+ /**
+ * Get object's footer.
+ *
+ * @param in Input stream.
+ * @param start Start position.
+ * @return Footer start.
+ */
+ public static int footerStartAbsolute(BinaryPositionReadable in, int
start) {
+ return footerStartRelative(in, start) + start;
+ }
+
+ /**
+ * Get object's footer.
+ *
+ * @param in Input stream.
+ * @param start Start position.
+ * @return Footer.
+ */
+ public static IgniteBiTuple<Integer, Integer>
footerAbsolute(BinaryPositionReadable in, int start) {
+ short flags = in.readShortPositioned(start +
GridBinaryMarshaller.FLAGS_POS);
+
+ int footerEnd = length(in, start);
+
+ if (hasSchema(flags)) {
+ // Schema exists.
+ int footerStart = in.readIntPositioned(start +
GridBinaryMarshaller.SCHEMA_OR_RAW_OFF_POS);
+
+ if (hasRaw(flags))
+ footerEnd -= 4;
+
+ assert footerStart <= footerEnd;
+
+ return F.t(start + footerStart, start + footerEnd);
+ }
+ else
+ // No schema.
+ return F.t(start + footerEnd, start + footerEnd);
+ }
+
+ /**
+ * Get relative raw offset of the object.
+ *
+ * @param in Input stream.
+ * @param start Object start position inside the stream.
+ * @return Raw offset.
+ */
+ private static int rawOffsetRelative(BinaryPositionReadable in, int start)
{
+ short flags = in.readShortPositioned(start +
GridBinaryMarshaller.FLAGS_POS);
+
+ int len = length(in, start);
+
+ if (hasSchema(flags)) {
+ // Schema exists.
+ if (hasRaw(flags))
+ // Raw offset is set, it is at the very end of the object.
+ return in.readIntPositioned(start + len - 4);
+ else
+ // Raw offset is not set, so just return schema offset.
+ return in.readIntPositioned(start +
GridBinaryMarshaller.SCHEMA_OR_RAW_OFF_POS);
+ }
+ else
+ // No schema, raw offset is located on schema offset position.
+ return in.readIntPositioned(start +
GridBinaryMarshaller.SCHEMA_OR_RAW_OFF_POS);
+ }
+
+ /**
+ * Get absolute raw offset of the object.
+ *
+ * @param in Input stream.
+ * @param start Object start position inside the stream.
+ * @return Raw offset.
+ */
+ public static int rawOffsetAbsolute(BinaryPositionReadable in, int start) {
+ return start + rawOffsetRelative(in, start);
+ }
+
+ /**
+ * Get offset length for the given flags.
+ *
+ * @param flags Flags.
+ * @return Offset size.
+ */
+ public static int fieldOffsetLength(short flags) {
+ if ((flags & FLAG_OFFSET_ONE_BYTE) == FLAG_OFFSET_ONE_BYTE)
+ return OFFSET_1;
+ else if ((flags & FLAG_OFFSET_TWO_BYTES) == FLAG_OFFSET_TWO_BYTES)
+ return OFFSET_2;
+ else
+ return OFFSET_4;
+ }
+
+ /**
+ * Get field ID length.
+ *
+ * @param flags Flags.
+ * @return Field ID length.
+ */
+ public static int fieldIdLength(short flags) {
+ return isCompactFooter(flags) ? 0 : FIELD_ID_LEN;
+ }
+
+ /**
+ * Get relative field offset.
+ *
+ * @param stream Stream.
+ * @param pos Position.
+ * @param fieldOffsetSize Field offset size.
+ * @return Relative field offset.
+ */
+ public static int fieldOffsetRelative(BinaryPositionReadable stream, int
pos, int fieldOffsetSize) {
+ int res;
+
+ if (fieldOffsetSize == OFFSET_1)
+ res = (int)stream.readBytePositioned(pos) & 0xFF;
+ else if (fieldOffsetSize == OFFSET_2)
+ res = (int)stream.readShortPositioned(pos) & 0xFFFF;
+ else
+ res = stream.readIntPositioned(pos);
+
+ return res;
+ }
+
+ /**
+ * @return {@code true} if content of serialized value cannot contain
references to other object.
+ */
+ public static boolean isPlainType(int type) {
+ return type > 0 && type < PLAIN_TYPE_FLAG.length &&
PLAIN_TYPE_FLAG[type];
+ }
+
+ /**
+ * Checks whether an array type values can or can not contain references
to other object.
+ *
+ * @param type Array type.
+ * @return {@code true} if content of serialized array value cannot
contain references to other object.
+ */
+ public static boolean isPlainArrayType(int type) {
+ return (type >= GridBinaryMarshaller.BYTE_ARR && type <=
GridBinaryMarshaller.DATE_ARR)
+ || type == GridBinaryMarshaller.TIMESTAMP_ARR || type ==
GridBinaryMarshaller.TIME_ARR;
+ }
+
+ /**
+ * Write value with flag. e.g. writePlainObject(writer, (byte)77) will
write two byte: {BYTE, 77}.
+ *
+ * @param writer W
+ * @param val Value.
+ */
+ public static void writePlainObject(BinaryWriterEx writer, Object val) {
+ Byte flag = PLAIN_CLASS_TO_FLAG.get(val.getClass());
+
+ if (flag == null)
+ throw new IllegalArgumentException("Can't write object with type:
" + val.getClass());
+
+ switch (flag) {
+ case GridBinaryMarshaller.BYTE:
+ writer.writeByte(flag);
+ writer.writeByte((Byte)val);
+
+ break;
+
+ case GridBinaryMarshaller.SHORT:
+ writer.writeByte(flag);
+ writer.writeShort((Short)val);
+
+ break;
+
+ case GridBinaryMarshaller.INT:
+ writer.writeByte(flag);
+ writer.writeInt((Integer)val);
+
+ break;
+
+ case GridBinaryMarshaller.LONG:
+ writer.writeByte(flag);
+ writer.writeLong((Long)val);
+
+ break;
+
+ case GridBinaryMarshaller.FLOAT:
+ writer.writeByte(flag);
+ writer.writeFloat((Float)val);
+
+ break;
+
+ case GridBinaryMarshaller.DOUBLE:
+ writer.writeByte(flag);
+ writer.writeDouble((Double)val);
+
+ break;
+
+ case GridBinaryMarshaller.CHAR:
+ writer.writeByte(flag);
+ writer.writeChar((Character)val);
+
+ break;
+
+ case GridBinaryMarshaller.BOOLEAN:
+ writer.writeByte(flag);
+ writer.writeBoolean((Boolean)val);
+
+ break;
+
+ case GridBinaryMarshaller.DECIMAL:
+ writer.writeDecimal((BigDecimal)val);
+
+ break;
+
+ case GridBinaryMarshaller.STRING:
+ writer.writeString((String)val);
+
+ break;
+
+ case GridBinaryMarshaller.UUID:
+ writer.writeUuid((UUID)val);
+
+ break;
+
+ case GridBinaryMarshaller.DATE:
+ writer.writeDate((Date)val);
+
+ break;
+
+ case GridBinaryMarshaller.TIMESTAMP:
+ writer.writeTimestamp((Timestamp)val);
+
+ break;
+
+ case GridBinaryMarshaller.TIME:
+ writer.writeTime((Time)val);
+
+ break;
+
+ case GridBinaryMarshaller.BYTE_ARR:
+ writer.writeByteArray((byte[])val);
+
+ break;
+
+ case GridBinaryMarshaller.SHORT_ARR:
+ writer.writeShortArray((short[])val);
+
+ break;
+
+ case GridBinaryMarshaller.INT_ARR:
+ writer.writeIntArray((int[])val);
+
+ break;
+
+ case GridBinaryMarshaller.LONG_ARR:
+ writer.writeLongArray((long[])val);
+
+ break;
+
+ case GridBinaryMarshaller.FLOAT_ARR:
+ writer.writeFloatArray((float[])val);
+
+ break;
+
+ case GridBinaryMarshaller.DOUBLE_ARR:
+ writer.writeDoubleArray((double[])val);
+
+ break;
+
+ case GridBinaryMarshaller.CHAR_ARR:
+ writer.writeCharArray((char[])val);
+
+ break;
+
+ case GridBinaryMarshaller.BOOLEAN_ARR:
+ writer.writeBooleanArray((boolean[])val);
+
+ break;
+
+ case GridBinaryMarshaller.DECIMAL_ARR:
+ writer.writeDecimalArray((BigDecimal[])val);
+
+ break;
+
+ case GridBinaryMarshaller.STRING_ARR:
+ writer.writeStringArray((String[])val);
+
+ break;
+
+ case GridBinaryMarshaller.UUID_ARR:
+ writer.writeUuidArray((UUID[])val);
+
+ break;
+
+ case GridBinaryMarshaller.DATE_ARR:
+ writer.writeDateArray((Date[])val);
+
+ break;
+
+ case GridBinaryMarshaller.TIMESTAMP_ARR:
+ writer.writeTimestampArray((Timestamp[])val);
+
+ break;
+
+ case GridBinaryMarshaller.TIME_ARR:
+ writer.writeTimeArray((Time[])val);
+
+ break;
+
+ default:
+ throw new IllegalArgumentException("Can't write object with
type: " + val.getClass());
+ }
+ }
+
+ /**
+ * @param val Value to check.
+ * @return {@code True} if {@code val} instance of {@link BinaryEnumArray}.
+ */
+ public static boolean isBinaryEnumArray(Object val) {
+ return val instanceof BinaryEnumArray;
+ }
+
+ /**
+ * Gets field by its order.
+ *
+ * @param reader Reader.
+ * @param order Order.
+ */
+ public static int fieldId(BinaryReaderEx reader, int order) {
+ return reader.getOrCreateSchema().fieldId(order);
+ }
+
+ /** */
+ public static int hashCode(byte[] data, int startPos, int endPos) {
+ int hash = 1;
+
+ for (int i = startPos; i < endPos; i++)
+ hash = 31 * hash + data[i];
+
+ return hash;
+ }
+
+ /**
+ * Creates reader instance.
+ *
+ * @param ctx Context.
+ * @param in Input stream.
+ * @param ldr Class loader.
+ * @param reader BinaryReaderEx.
+ * @param forUnmarshal {@code True} if reader is need to unmarshal object.
+ */
+ public static BinaryReaderEx reader(BinaryContext ctx,
+ BinaryInputStream in,
+ ClassLoader ldr,
+ BinaryReaderEx reader,
+ boolean forUnmarshal) {
+ return BinaryUtils.binariesFactory.reader(ctx, in, ldr,
reader.handles(), forUnmarshal);
+ }
+}
diff --git
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
index 7dd2bebdf86..d41d6a3160d 100644
---
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
@@ -45,6 +45,7 @@ import org.apache.ignite.marshaller.Marshallers;
import org.jetbrains.annotations.Nullable;
import static java.nio.charset.StandardCharsets.UTF_8;
+import static
org.apache.ignite.internal.binary.BinaryImplUtils.FLAG_COMPACT_FOOTER;
import static
org.apache.ignite.internal.binary.GridBinaryMarshaller.TRANSFORMED;
/**
@@ -345,7 +346,12 @@ public final class BinaryObjectImpl extends
BinaryObjectExImpl implements Extern
@Override public boolean isFlagSet(short flag) {
short flags = BinaryPrimitives.readShort(arr, start +
GridBinaryMarshaller.FLAGS_POS);
- return BinaryUtils.isFlagSet(flags, flag);
+ return BinaryImplUtils.isFlagSet(flags, flag);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isCompactFooter() {
+ return isFlagSet(FLAG_COMPACT_FOOTER);
}
/** {@inheritDoc} */
@@ -406,7 +412,7 @@ public final class BinaryObjectImpl extends
BinaryObjectExImpl implements Extern
@Override public int footerStartOffset() {
short flags = BinaryPrimitives.readShort(arr, start +
GridBinaryMarshaller.FLAGS_POS);
- if (!BinaryUtils.hasSchema(flags))
+ if (!BinaryImplUtils.hasSchema(flags))
return start + length();
return start + BinaryPrimitives.readInt(arr, start +
GridBinaryMarshaller.SCHEMA_OR_RAW_OFF_POS);
@@ -424,16 +430,16 @@ public final class BinaryObjectImpl extends
BinaryObjectExImpl implements Extern
short flags = BinaryPrimitives.readShort(arr, start +
GridBinaryMarshaller.FLAGS_POS);
- int fieldIdLen = BinaryUtils.isCompactFooter(flags) ? 0 :
BinaryUtils.FIELD_ID_LEN;
- int fieldOffLen = BinaryUtils.fieldOffsetLength(flags);
+ int fieldIdLen = BinaryImplUtils.isCompactFooter(flags) ? 0 :
BinaryImplUtils.FIELD_ID_LEN;
+ int fieldOffLen = BinaryImplUtils.fieldOffsetLength(flags);
int fieldOffsetPos = start + schemaOff + order * (fieldIdLen +
fieldOffLen) + fieldIdLen;
int fieldPos;
- if (fieldOffLen == BinaryUtils.OFFSET_1)
+ if (fieldOffLen == BinaryImplUtils.OFFSET_1)
fieldPos = start + ((int)BinaryPrimitives.readByte(arr,
fieldOffsetPos) & 0xFF);
- else if (fieldOffLen == BinaryUtils.OFFSET_2)
+ else if (fieldOffLen == BinaryImplUtils.OFFSET_2)
fieldPos = start + ((int)BinaryPrimitives.readShort(arr,
fieldOffsetPos) & 0xFFFF);
else
fieldPos = start + BinaryPrimitives.readInt(arr, fieldOffsetPos);
@@ -570,16 +576,16 @@ public final class BinaryObjectImpl extends
BinaryObjectExImpl implements Extern
short flags = BinaryPrimitives.readShort(arr, start +
GridBinaryMarshaller.FLAGS_POS);
- int fieldIdLen = BinaryUtils.isCompactFooter(flags) ? 0 :
BinaryUtils.FIELD_ID_LEN;
- int fieldOffsetLen = BinaryUtils.fieldOffsetLength(flags);
+ int fieldIdLen = BinaryImplUtils.isCompactFooter(flags) ? 0 :
BinaryImplUtils.FIELD_ID_LEN;
+ int fieldOffsetLen = BinaryImplUtils.fieldOffsetLength(flags);
int fieldOffsetPos = start + schemaOffset + order * (fieldIdLen +
fieldOffsetLen) + fieldIdLen;
int fieldPos;
- if (fieldOffsetLen == BinaryUtils.OFFSET_1)
+ if (fieldOffsetLen == BinaryImplUtils.OFFSET_1)
fieldPos = start + ((int)BinaryPrimitives.readByte(arr,
fieldOffsetPos) & 0xFF);
- else if (fieldOffsetLen == BinaryUtils.OFFSET_2)
+ else if (fieldOffsetLen == BinaryImplUtils.OFFSET_2)
fieldPos = start + ((int)BinaryPrimitives.readShort(arr,
fieldOffsetPos) & 0xFFFF);
else
fieldPos = start + BinaryPrimitives.readInt(arr, fieldOffsetPos);
@@ -728,7 +734,7 @@ public final class BinaryObjectImpl extends
BinaryObjectExImpl implements Extern
@Override public boolean hasSchema() {
short flags = BinaryPrimitives.readShort(arr, start +
GridBinaryMarshaller.FLAGS_POS);
- return BinaryUtils.hasSchema(flags);
+ return BinaryImplUtils.hasSchema(flags);
}
/** {@inheritDoc} */
diff --git
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
index e2ac1b89b4e..9ad6c06a605 100644
---
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
@@ -43,6 +43,7 @@ import org.apache.ignite.marshaller.Marshallers;
import org.jetbrains.annotations.Nullable;
import static java.nio.charset.StandardCharsets.UTF_8;
+import static
org.apache.ignite.internal.binary.BinaryImplUtils.FLAG_COMPACT_FOOTER;
/**
* Binary object implementation over offheap memory
@@ -117,7 +118,7 @@ class BinaryObjectOffheapImpl extends BinaryObjectExImpl
implements Externalizab
@Override public boolean hasSchema() {
short flags = BinaryPrimitives.readShort(ptr, start +
GridBinaryMarshaller.FLAGS_POS);
- return BinaryUtils.hasSchema(flags);
+ return BinaryImplUtils.hasSchema(flags);
}
/** {@inheritDoc} */
@@ -175,7 +176,12 @@ class BinaryObjectOffheapImpl extends BinaryObjectExImpl
implements Externalizab
@Override public boolean isFlagSet(short flag) {
short flags = BinaryPrimitives.readShort(ptr, start +
GridBinaryMarshaller.FLAGS_POS);
- return BinaryUtils.isFlagSet(flags, flag);
+ return BinaryImplUtils.isFlagSet(flags, flag);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean isCompactFooter() {
+ return isFlagSet(FLAG_COMPACT_FOOTER);
}
/** {@inheritDoc} */
@@ -215,7 +221,7 @@ class BinaryObjectOffheapImpl extends BinaryObjectExImpl
implements Externalizab
@Override public int footerStartOffset() {
short flags = BinaryPrimitives.readShort(ptr, start +
GridBinaryMarshaller.FLAGS_POS);
- if (!BinaryUtils.hasSchema(flags))
+ if (!BinaryImplUtils.hasSchema(flags))
return start + length();
return start + BinaryPrimitives.readInt(ptr, start +
GridBinaryMarshaller.SCHEMA_OR_RAW_OFF_POS);
@@ -233,16 +239,16 @@ class BinaryObjectOffheapImpl extends BinaryObjectExImpl
implements Externalizab
short flags = BinaryPrimitives.readShort(ptr, start +
GridBinaryMarshaller.FLAGS_POS);
- int fieldIdLen = BinaryUtils.isCompactFooter(flags) ? 0 :
BinaryUtils.FIELD_ID_LEN;
- int fieldOffLen = BinaryUtils.fieldOffsetLength(flags);
+ int fieldIdLen = BinaryImplUtils.isCompactFooter(flags) ? 0 :
BinaryImplUtils.FIELD_ID_LEN;
+ int fieldOffLen = BinaryImplUtils.fieldOffsetLength(flags);
int fieldOffsetPos = start + schemaOff + order * (fieldIdLen +
fieldOffLen) + fieldIdLen;
int fieldPos;
- if (fieldOffLen == BinaryUtils.OFFSET_1)
+ if (fieldOffLen == BinaryImplUtils.OFFSET_1)
fieldPos = start + ((int)BinaryPrimitives.readByte(ptr,
fieldOffsetPos) & 0xFF);
- else if (fieldOffLen == BinaryUtils.OFFSET_2)
+ else if (fieldOffLen == BinaryImplUtils.OFFSET_2)
fieldPos = start + ((int)BinaryPrimitives.readShort(ptr,
fieldOffsetPos) & 0xFFFF);
else
fieldPos = start + BinaryPrimitives.readInt(ptr, fieldOffsetPos);
diff --git
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
index 2ab4ef2ca8b..8b0fe48dbb3 100644
---
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
@@ -235,16 +235,16 @@ class BinaryReaderExImpl implements BinaryReaderEx {
int offset = in.readInt();
// Get trivial flag values.
- userType = BinaryUtils.isUserType(flags);
- fieldIdLen = BinaryUtils.fieldIdLength(flags);
- fieldOffLen = BinaryUtils.fieldOffsetLength(flags);
+ userType = BinaryImplUtils.isUserType(flags);
+ fieldIdLen = BinaryImplUtils.fieldIdLength(flags);
+ fieldOffLen = BinaryImplUtils.fieldOffsetLength(flags);
// Calculate footer borders and raw offset.
- if (BinaryUtils.hasSchema(flags)) {
+ if (BinaryImplUtils.hasSchema(flags)) {
// Schema exists.
footerStart = start + offset;
- if (BinaryUtils.hasRaw(flags)) {
+ if (BinaryImplUtils.hasRaw(flags)) {
footerLen = len - offset;
rawOff = start + in.readIntPositioned(start + len - 4);
}
@@ -258,7 +258,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
footerStart = start + len;
footerLen = 0;
- if (BinaryUtils.hasRaw(flags))
+ if (BinaryImplUtils.hasRaw(flags))
rawOff = start + offset;
else
rawOff = start + len;
@@ -288,7 +288,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
}
mapper = userType ? ctx.userTypeMapper(typeId) :
BinaryContext.defaultMapper();
- schema = BinaryUtils.hasSchema(flags) ? getOrCreateSchema() : null;
+ schema = BinaryImplUtils.hasSchema(flags) ? getOrCreateSchema() :
null;
}
else {
dataStart = 0;
@@ -374,11 +374,6 @@ class BinaryReaderExImpl implements BinaryReaderEx {
return null;
}
- /** {@inheritDoc} */
- @Override public void setHandle(Object obj) {
- setHandle(obj, start);
- }
-
/** {@inheritDoc} */
@Override public void setHandle(Object obj, int pos) {
handles().put(pos, obj);
@@ -1991,7 +1986,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
BinarySchema schema = ctx.schemaRegistry(typeId).schema(schemaId);
if (schema == null) {
- if (fieldIdLen != BinaryUtils.FIELD_ID_LEN) {
+ if (fieldIdLen != BinaryImplUtils.FIELD_ID_LEN) {
BinaryTypeImpl type = (BinaryTypeImpl)ctx.metadata(typeId,
schemaId);
BinaryMetadata meta = type != null ? type.metadata() : null;
@@ -2043,7 +2038,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
* @return Schema.
*/
private BinarySchema createSchema() {
- assert fieldIdLen == BinaryUtils.FIELD_ID_LEN;
+ assert fieldIdLen == BinaryImplUtils.FIELD_ID_LEN;
BinarySchema.Builder builder = BinarySchema.Builder.newBuilder();
@@ -2055,7 +2050,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
builder.addField(fieldId);
- searchPos += BinaryUtils.FIELD_ID_LEN + fieldOffLen;
+ searchPos += BinaryImplUtils.FIELD_ID_LEN + fieldOffLen;
}
return builder.build();
@@ -2186,7 +2181,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
if (order != BinarySchema.ORDER_NOT_FOUND) {
int offsetPos = footerStart + order * (fieldIdLen + fieldOffLen) +
fieldIdLen;
- int pos = start + BinaryUtils.fieldOffsetRelative(in, offsetPos,
fieldOffLen);
+ int pos = start + BinaryImplUtils.fieldOffsetRelative(in,
offsetPos, fieldOffLen);
streamPosition(pos);
@@ -2204,7 +2199,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
*/
private boolean trySetSystemFieldPosition(int id) {
// System types are never written with compact footers because they do
not have metadata.
- assert fieldIdLen == BinaryUtils.FIELD_ID_LEN;
+ assert fieldIdLen == BinaryImplUtils.FIELD_ID_LEN;
int searchPos = footerStart;
int searchTail = searchPos + footerLen;
@@ -2216,7 +2211,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
int id0 = in.readIntPositioned(searchPos);
if (id0 == id) {
- int pos = start + BinaryUtils.fieldOffsetRelative(in,
searchPos + BinaryUtils.FIELD_ID_LEN,
+ int pos = start + BinaryImplUtils.fieldOffsetRelative(in,
searchPos + BinaryImplUtils.FIELD_ID_LEN,
fieldOffLen);
streamPosition(pos);
@@ -2224,7 +2219,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
return true;
}
- searchPos += BinaryUtils.FIELD_ID_LEN + fieldOffLen;
+ searchPos += BinaryImplUtils.FIELD_ID_LEN + fieldOffLen;
}
}
@@ -2375,7 +2370,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
case BINARY:
res = newInstance(desc.ctor(), desc.describedClass());
- setHandle(res);
+ setHandle(res, start);
if (desc.serializer != null)
desc.serializer.readBinary(res, this);
@@ -2387,7 +2382,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
case OBJECT:
res = newInstance(desc.ctor(), desc.describedClass());
- setHandle(res);
+ setHandle(res, start);
for (BinaryFieldDescriptor info : desc.fields)
readField(res, info);
@@ -2404,7 +2399,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
try {
res = desc.readResolveMtd.invoke(res);
- setHandle(res);
+ setHandle(res, start);
}
catch (IllegalAccessException e) {
throw new RuntimeException(e);
diff --git
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
index 9f36b6d7489..edea8d3699b 100644
---
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
@@ -246,11 +246,11 @@ class BinaryWriterExImpl implements BinaryWriterEx {
if (userType) {
if (ctx.isCompactFooter()) {
- flags = BinaryUtils.FLAG_USR_TYP |
BinaryUtils.FLAG_COMPACT_FOOTER;
+ flags = BinaryImplUtils.FLAG_USR_TYP |
BinaryImplUtils.FLAG_COMPACT_FOOTER;
useCompactFooter = true;
}
else {
- flags = BinaryUtils.FLAG_USR_TYP;
+ flags = BinaryImplUtils.FLAG_USR_TYP;
useCompactFooter = false;
}
}
@@ -265,18 +265,18 @@ class BinaryWriterExImpl implements BinaryWriterEx {
offset = out.position() - start;
// Write the schema.
- flags |= BinaryUtils.FLAG_HAS_SCHEMA;
+ flags |= BinaryImplUtils.FLAG_HAS_SCHEMA;
int offsetByteCnt = schema.write(out, fieldCnt, useCompactFooter);
- if (offsetByteCnt == BinaryUtils.OFFSET_1)
- flags |= BinaryUtils.FLAG_OFFSET_ONE_BYTE;
- else if (offsetByteCnt == BinaryUtils.OFFSET_2)
- flags |= BinaryUtils.FLAG_OFFSET_TWO_BYTES;
+ if (offsetByteCnt == BinaryImplUtils.OFFSET_1)
+ flags |= BinaryImplUtils.FLAG_OFFSET_ONE_BYTE;
+ else if (offsetByteCnt == BinaryImplUtils.OFFSET_2)
+ flags |= BinaryImplUtils.FLAG_OFFSET_TWO_BYTES;
// Write raw offset if needed.
if (rawOffPos != 0) {
- flags |= BinaryUtils.FLAG_HAS_RAW;
+ flags |= BinaryImplUtils.FLAG_HAS_RAW;
out.writeInt(rawOffPos - start);
}
@@ -286,7 +286,7 @@ class BinaryWriterExImpl implements BinaryWriterEx {
offset = rawOffPos - start;
// If there is no schema, we are free to write raw offset to
schema offset.
- flags |= BinaryUtils.FLAG_HAS_RAW;
+ flags |= BinaryImplUtils.FLAG_HAS_RAW;
}
else
offset = GridBinaryMarshaller.DFLT_HDR_LEN;
diff --git
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryWriterSchemaHolder.java
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryWriterSchemaHolder.java
index cd2d8c5d761..fecb10aa239 100644
---
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryWriterSchemaHolder.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryWriterSchemaHolder.java
@@ -96,19 +96,19 @@ class BinaryWriterSchemaHolder {
for (int curIdx = startIdx + 1; curIdx < idx; curIdx += 2)
out.unsafeWriteByte((byte)data[curIdx]);
- res = BinaryUtils.OFFSET_1;
+ res = BinaryImplUtils.OFFSET_1;
}
else if (lastOffset < MAX_OFFSET_2) {
for (int curIdx = startIdx + 1; curIdx < idx; curIdx += 2)
out.unsafeWriteShort((short)data[curIdx]);
- res = BinaryUtils.OFFSET_2;
+ res = BinaryImplUtils.OFFSET_2;
}
else {
for (int curIdx = startIdx + 1; curIdx < idx; curIdx += 2)
out.unsafeWriteInt(data[curIdx]);
- res = BinaryUtils.OFFSET_4;
+ res = BinaryImplUtils.OFFSET_4;
}
}
else {
@@ -118,7 +118,7 @@ class BinaryWriterSchemaHolder {
out.unsafeWriteByte((byte)data[curIdx++]);
}
- res = BinaryUtils.OFFSET_1;
+ res = BinaryImplUtils.OFFSET_1;
}
else if (lastOffset < MAX_OFFSET_2) {
for (int curIdx = startIdx; curIdx < idx;) {
@@ -126,7 +126,7 @@ class BinaryWriterSchemaHolder {
out.unsafeWriteShort((short)data[curIdx++]);
}
- res = BinaryUtils.OFFSET_2;
+ res = BinaryImplUtils.OFFSET_2;
}
else {
for (int curIdx = startIdx; curIdx < idx;) {
@@ -134,7 +134,7 @@ class BinaryWriterSchemaHolder {
out.unsafeWriteInt(data[curIdx++]);
}
- res = BinaryUtils.OFFSET_4;
+ res = BinaryImplUtils.OFFSET_4;
}
}
diff --git
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/CrossObjectReferenceResolver.java
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/CrossObjectReferenceResolver.java
index 845f057fe8f..d5c06d7032e 100644
---
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/CrossObjectReferenceResolver.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/CrossObjectReferenceResolver.java
@@ -21,18 +21,18 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.ignite.internal.binary.streams.BinaryOutputStream;
-import static
org.apache.ignite.internal.binary.BinaryUtils.FLAG_OFFSET_ONE_BYTE;
-import static
org.apache.ignite.internal.binary.BinaryUtils.FLAG_OFFSET_TWO_BYTES;
-import static org.apache.ignite.internal.binary.BinaryUtils.OFFSET_1;
-import static org.apache.ignite.internal.binary.BinaryUtils.OFFSET_2;
-import static org.apache.ignite.internal.binary.BinaryUtils.dataStartRelative;
-import static org.apache.ignite.internal.binary.BinaryUtils.fieldOffsetLength;
-import static
org.apache.ignite.internal.binary.BinaryUtils.footerStartAbsolute;
-import static org.apache.ignite.internal.binary.BinaryUtils.hasRaw;
-import static org.apache.ignite.internal.binary.BinaryUtils.hasSchema;
-import static org.apache.ignite.internal.binary.BinaryUtils.isCompactFooter;
+import static
org.apache.ignite.internal.binary.BinaryImplUtils.FLAG_OFFSET_ONE_BYTE;
+import static
org.apache.ignite.internal.binary.BinaryImplUtils.FLAG_OFFSET_TWO_BYTES;
+import static org.apache.ignite.internal.binary.BinaryImplUtils.OFFSET_1;
+import static org.apache.ignite.internal.binary.BinaryImplUtils.OFFSET_2;
+import static
org.apache.ignite.internal.binary.BinaryImplUtils.dataStartRelative;
+import static
org.apache.ignite.internal.binary.BinaryImplUtils.fieldOffsetLength;
+import static
org.apache.ignite.internal.binary.BinaryImplUtils.footerStartAbsolute;
+import static org.apache.ignite.internal.binary.BinaryImplUtils.hasRaw;
+import static org.apache.ignite.internal.binary.BinaryImplUtils.hasSchema;
+import static
org.apache.ignite.internal.binary.BinaryImplUtils.isCompactFooter;
+import static
org.apache.ignite.internal.binary.BinaryImplUtils.rawOffsetAbsolute;
import static org.apache.ignite.internal.binary.BinaryUtils.length;
-import static org.apache.ignite.internal.binary.BinaryUtils.rawOffsetAbsolute;
import static
org.apache.ignite.internal.binary.GridBinaryMarshaller.DFLT_HDR_LEN;
import static org.apache.ignite.internal.binary.GridBinaryMarshaller.FLAGS_POS;
import static
org.apache.ignite.internal.binary.GridBinaryMarshaller.HASH_CODE_POS;
@@ -188,7 +188,7 @@ class CrossObjectReferenceResolver {
overrideHeader(
outObjStartPos,
/** flags */ setFieldOffsetFlag(inObjDesc.flags,
footerFieldOffsetLen),
- /** hash */ BinaryUtils.hashCode(out.array(), outObjStartPos +
DFLT_HDR_LEN, outFooterStartPos),
+ /** hash */ BinaryImplUtils.hashCode(out.array(),
outObjStartPos + DFLT_HDR_LEN, outFooterStartPos),
/** total length */ out.position() - outObjStartPos,
schemaOrRawOffsetPos
);
diff --git
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/ObjectDetachHelper.java
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/ObjectDetachHelper.java
index 1c9edee42b1..d5e40860186 100644
---
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/ObjectDetachHelper.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/ObjectDetachHelper.java
@@ -21,9 +21,9 @@ import
org.apache.ignite.internal.binary.streams.BinaryInputStream;
import org.apache.ignite.internal.binary.streams.BinaryOutputStream;
import org.apache.ignite.internal.binary.streams.BinaryStreams;
-import static org.apache.ignite.internal.binary.BinaryUtils.dataStartRelative;
+import static
org.apache.ignite.internal.binary.BinaryImplUtils.dataStartRelative;
+import static
org.apache.ignite.internal.binary.BinaryImplUtils.rawOffsetAbsolute;
import static org.apache.ignite.internal.binary.BinaryUtils.length;
-import static org.apache.ignite.internal.binary.BinaryUtils.rawOffsetAbsolute;
/** */
class ObjectDetachHelper {
diff --git
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
index cc5f6da0a1b..6f2a505f7b9 100644
---
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
@@ -24,6 +24,7 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.ignite.binary.BinaryObjectException;
import org.apache.ignite.internal.binary.BinaryContext;
+import org.apache.ignite.internal.binary.BinaryImplUtils;
import org.apache.ignite.internal.binary.BinaryObjectEx;
import org.apache.ignite.internal.binary.BinaryObjectImpl;
import org.apache.ignite.internal.binary.BinaryPositionReadable;
@@ -87,7 +88,7 @@ class BinaryBuilderReader implements BinaryPositionReadable {
this.arr = other.arr;
this.pos = start;
- reader = BinaryUtils.reader(ctx,
+ reader = BinaryImplUtils.reader(ctx,
BinaryStreams.inputStream(arr, start),
null,
other.reader,
diff --git
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
index c30f1daf9a9..f2e1926a30d 100644
---
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
@@ -22,6 +22,7 @@ import java.util.IdentityHashMap;
import java.util.Map;
import org.apache.ignite.binary.BinaryObject;
import org.apache.ignite.internal.binary.BinariesFactoryImpl;
+import org.apache.ignite.internal.binary.BinaryImplUtils;
import org.apache.ignite.internal.binary.BinaryObjectEx;
import org.apache.ignite.internal.binary.BinaryUtils;
import org.apache.ignite.internal.binary.BinaryWriterEx;
@@ -174,12 +175,12 @@ class BinaryBuilderSerializer {
Byte flag = BinaryUtils.PLAIN_CLASS_TO_FLAG.get(val.getClass());
if (flag != null) {
- BinaryUtils.writePlainObject(writer, val);
+ BinaryImplUtils.writePlainObject(writer, val);
return;
}
- if (BinaryUtils.isBinaryEnumArray(val)) {
+ if (BinaryImplUtils.isBinaryEnumArray(val)) {
BinaryObjectEx val0 = (BinaryObjectEx)val;
if (val0.componentTypeId() ==
GridBinaryMarshaller.UNREGISTERED_TYPE_ID)
diff --git
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
index 65c31228303..33d372f3741 100644
---
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
+++
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
@@ -33,6 +33,7 @@ import org.apache.ignite.binary.BinaryType;
import org.apache.ignite.internal.binary.BinariesFactoryImpl;
import org.apache.ignite.internal.binary.BinaryContext;
import org.apache.ignite.internal.binary.BinaryFieldMetadata;
+import org.apache.ignite.internal.binary.BinaryImplUtils;
import org.apache.ignite.internal.binary.BinaryObjectEx;
import org.apache.ignite.internal.binary.BinaryObjectImpl;
import org.apache.ignite.internal.binary.BinaryUtils;
@@ -207,7 +208,7 @@ class BinaryObjectBuilderImpl implements
BinaryObjectBuilderEx {
Map<String, BinaryFieldMetadata> fieldsMeta = null;
- if (reader != null && BinaryUtils.hasSchema(flags)) {
+ if (reader != null && BinaryImplUtils.hasSchema(flags)) {
Map<Integer, Object> assignedFldsById;
if (assignedVals != null) {
@@ -231,16 +232,16 @@ class BinaryObjectBuilderImpl implements
BinaryObjectBuilderEx {
assignedFldsById = Collections.emptyMap();
// Get footer details.
- int fieldIdLen = BinaryUtils.fieldIdLength(flags);
- int fieldOffsetLen = BinaryUtils.fieldOffsetLength(flags);
+ int fieldIdLen = BinaryImplUtils.fieldIdLength(flags);
+ int fieldOffsetLen = BinaryImplUtils.fieldOffsetLength(flags);
- IgniteBiTuple<Integer, Integer> footer =
BinaryUtils.footerAbsolute(reader, start);
+ IgniteBiTuple<Integer, Integer> footer =
BinaryImplUtils.footerAbsolute(reader, start);
int footerPos = footer.get1();
int footerEnd = footer.get2();
// Get raw position.
- int rawPos = BinaryUtils.rawOffsetAbsolute(reader, start);
+ int rawPos = BinaryImplUtils.rawOffsetAbsolute(reader, start);
// Position reader on data.
reader.position(start + hdrLen);
@@ -248,7 +249,7 @@ class BinaryObjectBuilderImpl implements
BinaryObjectBuilderEx {
int idx = 0;
while (reader.position() < rawPos) {
- int fieldId = BinaryUtils.fieldId(reader.reader(), idx++);
+ int fieldId = BinaryImplUtils.fieldId(reader.reader(),
idx++);
int fieldLen =
fieldPositionAndLength(footerPos, footerEnd, rawPos,
fieldIdLen, fieldOffsetLen).get2();
@@ -268,7 +269,7 @@ class BinaryObjectBuilderImpl implements
BinaryObjectBuilderEx {
else {
int type = fieldLen != 0 ? reader.readByte(0) : 0;
- if (fieldLen != 0 &&
!BinaryUtils.isPlainArrayType(type) && BinaryUtils.isPlainType(type)) {
+ if (fieldLen != 0 &&
!BinaryImplUtils.isPlainArrayType(type) && BinaryImplUtils.isPlainType(type)) {
writer.writeFieldId(fieldId);
writer.write(reader.array(), reader.position(),
fieldLen);
@@ -322,8 +323,8 @@ class BinaryObjectBuilderImpl implements
BinaryObjectBuilderEx {
if (reader != null) {
// Write raw data if any.
- int rawOff = BinaryUtils.rawOffsetAbsolute(reader, start);
- int footerStart = BinaryUtils.footerStartAbsolute(reader,
start);
+ int rawOff = BinaryImplUtils.rawOffsetAbsolute(reader, start);
+ int footerStart = BinaryImplUtils.footerStartAbsolute(reader,
start);
if (rawOff < footerStart) {
writer.rawWriter();
@@ -381,7 +382,7 @@ class BinaryObjectBuilderImpl implements
BinaryObjectBuilderEx {
else if (newVal.getClass().isArray() &&
BinaryObject.class.isAssignableFrom(newVal.getClass().getComponentType()))
newFldTypeId = GridBinaryMarshaller.OBJ_ARR;
- else if (BinaryUtils.isBinaryEnumArray(newVal))
+ else if (BinaryImplUtils.isBinaryEnumArray(newVal))
newFldTypeId = GridBinaryMarshaller.ENUM_ARR;
else if (BinaryUtils.isBinaryArray(newVal))
@@ -432,7 +433,7 @@ class BinaryObjectBuilderImpl implements
BinaryObjectBuilderEx {
private IgniteBiTuple<Integer, Integer> fieldPositionAndLength(int
footerPos, int footerEnd, int rawPos,
int fieldIdLen, int fieldOffsetLen) {
// Get field offset first.
- int fieldOffset = BinaryUtils.fieldOffsetRelative(reader, footerPos +
fieldIdLen, fieldOffsetLen);
+ int fieldOffset = BinaryImplUtils.fieldOffsetRelative(reader,
footerPos + fieldIdLen, fieldOffsetLen);
int fieldPos = start + fieldOffset;
// Get field length.
@@ -443,7 +444,7 @@ class BinaryObjectBuilderImpl implements
BinaryObjectBuilderEx {
fieldLen = rawPos - fieldPos;
else {
// Field is somewhere in the middle, get difference with the next
offset.
- int nextFieldOffset = BinaryUtils.fieldOffsetRelative(reader,
+ int nextFieldOffset = BinaryImplUtils.fieldOffsetRelative(reader,
footerPos + fieldIdLen + fieldOffsetLen + fieldIdLen,
fieldOffsetLen);
fieldLen = nextFieldOffset - fieldOffset;
@@ -459,22 +460,22 @@ class BinaryObjectBuilderImpl implements
BinaryObjectBuilderEx {
assert reader != null;
if (readCache == null) {
- int fieldIdLen = BinaryUtils.fieldIdLength(flags);
- int fieldOffsetLen = BinaryUtils.fieldOffsetLength(flags);
+ int fieldIdLen = BinaryImplUtils.fieldIdLength(flags);
+ int fieldOffsetLen = BinaryImplUtils.fieldOffsetLength(flags);
Map<Integer, Object> readCache = new HashMap<>();
- IgniteBiTuple<Integer, Integer> footer =
BinaryUtils.footerAbsolute(reader, start);
+ IgniteBiTuple<Integer, Integer> footer =
BinaryImplUtils.footerAbsolute(reader, start);
int footerPos = footer.get1();
int footerEnd = footer.get2();
- int rawPos = BinaryUtils.rawOffsetAbsolute(reader, start);
+ int rawPos = BinaryImplUtils.rawOffsetAbsolute(reader, start);
int idx = 0;
while (footerPos + fieldIdLen < footerEnd) {
- int fieldId = BinaryUtils.fieldId(reader.reader(), idx++);
+ int fieldId = BinaryImplUtils.fieldId(reader.reader(), idx++);
IgniteBiTuple<Integer, Integer> posAndLen =
fieldPositionAndLength(footerPos, footerEnd, rawPos,
fieldIdLen, fieldOffsetLen);
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/IdleVerifyUtility.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/IdleVerifyUtility.java
index 9e9b2b6a90c..3cccbb3e72a 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/IdleVerifyUtility.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/IdleVerifyUtility.java
@@ -55,7 +55,6 @@ import org.apache.ignite.internal.util.typedef.internal.SB;
import org.apache.ignite.lang.IgniteInClosure;
import org.jetbrains.annotations.Nullable;
-import static
org.apache.ignite.internal.binary.BinaryUtils.FLAG_COMPACT_FOOTER;
import static org.apache.ignite.internal.pagemem.PageIdAllocator.FLAG_AUX;
import static org.apache.ignite.internal.pagemem.PageIdAllocator.FLAG_DATA;
import static org.apache.ignite.internal.pagemem.PageIdAllocator.FLAG_IDX;
@@ -421,7 +420,7 @@ public class IdleVerifyUtility {
if (key.cacheObjectType() == TYPE_BINARY) {
binary++;
- if (((BinaryObjectEx)key).isFlagSet(FLAG_COMPACT_FOOTER))
+ if (((BinaryObjectEx)key).isCompactFooter())
cf++;
else
noCf++;
diff --git
a/modules/core/src/test/java/org/apache/ignite/client/BinaryConfigurationTest.java
b/modules/core/src/test/java/org/apache/ignite/client/BinaryConfigurationTest.java
index 543e020ccdd..965616d14db 100644
---
a/modules/core/src/test/java/org/apache/ignite/client/BinaryConfigurationTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/client/BinaryConfigurationTest.java
@@ -31,7 +31,7 @@ import org.apache.ignite.testframework.ListeningTestLogger;
import org.apache.ignite.testframework.LogListener;
import org.junit.Test;
-import static
org.apache.ignite.internal.binary.BinaryUtils.FLAG_COMPACT_FOOTER;
+import static
org.apache.ignite.internal.binary.BinaryImplUtils.FLAG_COMPACT_FOOTER;
/**
* Tests binary configuration behavior.
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerialiedFieldComparatorSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerialiedFieldComparatorSelfTest.java
index bacc6fb1e34..1fafa4eaa3f 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerialiedFieldComparatorSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerialiedFieldComparatorSelfTest.java
@@ -503,8 +503,8 @@ public class BinarySerialiedFieldComparatorSelfTest extends
GridCommonAbstractTe
? BinaryPrimitives.readShort(ptr, start +
GridBinaryMarshaller.FLAGS_POS)
: BinaryPrimitives.readShort(arr, start +
GridBinaryMarshaller.FLAGS_POS);
- int fieldIdLen = BinaryUtils.isCompactFooter(flags) ? 0 :
BinaryUtils.FIELD_ID_LEN;
- int fieldOffLen = BinaryUtils.fieldOffsetLength(flags);
+ int fieldIdLen = BinaryImplUtils.isCompactFooter(flags) ? 0 :
BinaryImplUtils.FIELD_ID_LEN;
+ int fieldOffLen = BinaryImplUtils.fieldOffsetLength(flags);
int orderBase = start + schemaOff + fieldIdLen;
int orderMultiplier = fieldIdLen + fieldOffLen;
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerializedFieldComparator.java
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerializedFieldComparator.java
index 150c1475bda..b3421ba9416 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerializedFieldComparator.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerializedFieldComparator.java
@@ -21,7 +21,7 @@ import java.util.Objects;
import org.apache.ignite.internal.util.offheap.unsafe.GridUnsafeMemory;
import org.apache.ignite.internal.util.typedef.F;
-import static org.apache.ignite.internal.binary.BinaryUtils.arrayEq;
+import static org.apache.ignite.testframework.GridTestUtils.arrayEq;
/**
* Compares fields in serialized form when possible.
@@ -94,12 +94,12 @@ class BinarySerializedFieldComparator {
else {
int pos = orderBase + order * orderMultiplier;
- if (fieldOffLen == BinaryUtils.OFFSET_1) {
+ if (fieldOffLen == BinaryImplUtils.OFFSET_1) {
byte val = offheap() ? BinaryPrimitives.readByte(ptr, pos) :
BinaryPrimitives.readByte(arr, pos);
curFieldPos = startOff + ((int)val & 0xFF);
}
- else if (fieldOffLen == BinaryUtils.OFFSET_2) {
+ else if (fieldOffLen == BinaryImplUtils.OFFSET_2) {
short val = offheap() ? BinaryPrimitives.readShort(ptr, pos) :
BinaryPrimitives.readShort(arr, pos);
curFieldPos = startOff + ((int)val & 0xFFFF);
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/metric/MetricsConfigurationTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/metric/MetricsConfigurationTest.java
index a5f2f56bae1..4bdd9989853 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/metric/MetricsConfigurationTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/metric/MetricsConfigurationTest.java
@@ -40,7 +40,6 @@ import
org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
import static org.apache.ignite.configuration.WALMode.FSYNC;
-import static org.apache.ignite.internal.binary.BinaryUtils.arrayEq;
import static
org.apache.ignite.internal.processors.cache.transactions.TransactionMetricsAdapter.METRIC_SYSTEM_TIME_HISTOGRAM;
import static
org.apache.ignite.internal.processors.metric.GridMetricManager.HISTOGRAM_CFG_PREFIX;
import static
org.apache.ignite.internal.processors.metric.GridMetricManager.HITRATE_CFG_PREFIX;
@@ -50,6 +49,7 @@ import static
org.apache.ignite.internal.processors.metric.impl.MetricUtils.cach
import static
org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
import static
org.apache.ignite.internal.processors.pool.PoolProcessor.TASK_EXEC_TIME;
import static
org.apache.ignite.internal.processors.pool.PoolProcessor.THREAD_POOLS;
+import static org.apache.ignite.testframework.GridTestUtils.arrayEq;
import static
org.apache.ignite.testframework.GridTestUtils.assertThrowsWithCause;
import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
import static org.junit.Assert.assertArrayEquals;
diff --git
a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
index c624cc8ba22..3b428455a09 100644
---
a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
+++
b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
@@ -141,6 +141,7 @@ import org.jetbrains.annotations.Nullable;
import static java.lang.Long.parseLong;
import static java.util.Comparator.comparingLong;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_HOME;
+import static org.apache.ignite.internal.binary.BinaryUtils.isBinaryArray;
import static
org.apache.ignite.internal.pagemem.PageIdAllocator.INDEX_PARTITION;
import static
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.partitionFileName;
import static org.apache.ignite.internal.util.lang.ClusterNodeFunc.nodeIds;
@@ -2660,4 +2661,43 @@ public final class GridTestUtils {
return size[0];
}
+
+ /**
+ * Check for arrays equality.
+ *
+ * @param a1 Value 1.
+ * @param a2 Value 2.
+ * @return {@code True} if arrays equal.
+ */
+ public static boolean arrayEq(Object a1, Object a2) {
+ if (a1 == a2)
+ return true;
+
+ if (a1 == null || a2 == null)
+ return a1 != null || a2 != null;
+
+ if (a1.getClass() != a2.getClass())
+ return false;
+
+ if (a1 instanceof byte[])
+ return Arrays.equals((byte[])a1, (byte[])a2);
+ else if (a1 instanceof boolean[])
+ return Arrays.equals((boolean[])a1, (boolean[])a2);
+ else if (a1 instanceof short[])
+ return Arrays.equals((short[])a1, (short[])a2);
+ else if (a1 instanceof char[])
+ return Arrays.equals((char[])a1, (char[])a2);
+ else if (a1 instanceof int[])
+ return Arrays.equals((int[])a1, (int[])a2);
+ else if (a1 instanceof long[])
+ return Arrays.equals((long[])a1, (long[])a2);
+ else if (a1 instanceof float[])
+ return Arrays.equals((float[])a1, (float[])a2);
+ else if (a1 instanceof double[])
+ return Arrays.equals((double[])a1, (double[])a2);
+ else if (isBinaryArray(a1))
+ return a1.equals(a2);
+
+ return Arrays.deepEquals((Object[])a1, (Object[])a2);
+ }
}