@Override protected GenericArraySerializer createOuterSerializerWithNestedSerializers(TypeSerializer<?>[] nestedSerializers) { @SuppressWarnings("unchecked") TypeSerializer<C> componentSerializer = (TypeSerializer<C>) nestedSerializers[0]; return new GenericArraySerializer<>(componentClass, componentSerializer); }
@Override public boolean equals(Object obj) { if (obj instanceof GenericArraySerializer) { GenericArraySerializer<?> other = (GenericArraySerializer<?>)obj; return other.canEqual(this) && componentClass == other.componentClass && componentSerializer.equals(other.componentSerializer); } else { return false; } }
@Override public C[] copy(C[] from, C[] reuse) { return copy(from); }
/** * Constructor to create the snapshot for writing. */ public GenericArraySerializerConfigSnapshot(GenericArraySerializer<C> serializer) { this.componentClass = serializer.getComponentClass(); this.nestedSnapshot = new NestedSerializersSnapshotDelegate(serializer.getComponentSerializer()); }
@Override public C[] createInstance() { if (EMPTY == null) { EMPTY = create(0); } return EMPTY; }
@Override public C[] deserialize(C[] reuse, DataInputView source) throws IOException { return deserialize(source); }
@Override protected TypeSerializer<?>[] getNestedSerializers(GenericArraySerializer outerSerializer) { return new TypeSerializer<?>[] { outerSerializer.getComponentSerializer() }; } }
/** * Constructor to be used for writing the snapshot. */ public GenericArraySerializerSnapshot(GenericArraySerializer<C> genericArraySerializer) { super(genericArraySerializer); this.componentClass = genericArraySerializer.getComponentClass(); }
@Override public C[] copy(C[] from) { final TypeSerializer<C> serializer = this.componentSerializer; if (serializer.isImmutableType()) { return Arrays.copyOf(from, from.length); } else { C[] copy = create(from.length); for (int i = 0; i < copy.length; i++) { C val = from[i]; if (val != null) { copy[i] = serializer.copy(val); } } return copy; } }
/** * Constructor to create the snapshot for writing. */ public GenericArraySerializerConfigSnapshot(GenericArraySerializer<C> serializer) { this.componentClass = serializer.getComponentClass(); this.nestedSnapshot = new CompositeSerializerSnapshot(serializer.getComponentSerializer()); }
@Override public C[] deserialize(C[] reuse, DataInputView source) throws IOException { return deserialize(source); }
@Override public GenericArraySerializer<C> duplicate() { TypeSerializer<C> duplicateComponentSerializer = this.componentSerializer.duplicate(); if (duplicateComponentSerializer == this.componentSerializer) { // is not stateful, return ourselves return this; } else { return new GenericArraySerializer<C>(componentClass, duplicateComponentSerializer); } }
@Override public C[] deserialize(DataInputView source) throws IOException { int len = source.readInt(); C[] array = create(len); for (int i = 0; i < len; i++) { boolean isNonNull = source.readBoolean(); if (isNonNull) { array[i] = componentSerializer.deserialize(source); } else { array[i] = null; } } return array; }
@Override public TypeSerializerSchemaCompatibility<C[]> resolveSchemaCompatibility(TypeSerializer<C[]> newSerializer) { checkState(componentClass != null && nestedSnapshot != null); if (newSerializer instanceof GenericArraySerializer) { GenericArraySerializer<C> serializer = (GenericArraySerializer<C>) newSerializer; TypeSerializerSchemaCompatibility<C> compat = serializer.getComponentClass() == componentClass ? TypeSerializerSchemaCompatibility.compatibleAsIs() : TypeSerializerSchemaCompatibility.incompatible(); return nestedSnapshot.resolveCompatibilityWithNested( compat, serializer.getComponentSerializer()); } else { return TypeSerializerSchemaCompatibility.incompatible(); } } }
@Override public boolean equals(Object obj) { if (obj instanceof GenericArraySerializer) { GenericArraySerializer<?> other = (GenericArraySerializer<?>)obj; return other.canEqual(this) && componentClass == other.componentClass && componentSerializer.equals(other.componentSerializer); } else { return false; } }
@Override public C[] copy(C[] from, C[] reuse) { return copy(from); }
@Override public C[] deserialize(C[] reuse, DataInputView source) throws IOException { return deserialize(source); }
private <T> GenericArraySerializer<T> createSerializer(Class<T> type, TypeSerializer<T> componentSerializer) { return new GenericArraySerializer<T>(type, componentSerializer); }
@Override public C[] createInstance() { if (EMPTY == null) { EMPTY = create(0); } return EMPTY; }
@Override public boolean equals(Object obj) { if (obj instanceof GenericArraySerializer) { GenericArraySerializer<?> other = (GenericArraySerializer<?>)obj; return other.canEqual(this) && componentClass == other.componentClass && componentSerializer.equals(other.componentSerializer); } else { return false; } }