public static void EncodeValue(PropertyBlock block, int keyId, Value value, DynamicRecordAllocator stringAllocator, DynamicRecordAllocator arrayAllocator, bool allowStorePointsAndTemporal) { if (value is ArrayValue) { object asObject = value.AsObject(); // Try short array first, i.e. inlined in the property block if (ShortArray.encode(keyId, asObject, block, PropertyType.PayloadSize)) { return; } // Fall back to dynamic array store IList <DynamicRecord> arrayRecords = new List <DynamicRecord>(); AllocateArrayRecords(arrayRecords, asObject, arrayAllocator, allowStorePointsAndTemporal); SetSingleBlockValue(block, keyId, PropertyType.Array, Iterables.first(arrayRecords).Id); foreach (DynamicRecord valueRecord in arrayRecords) { valueRecord.SetType(PropertyType.Array.intValue()); } block.ValueRecords = arrayRecords; } else { value.WriteTo(new PropertyBlockValueWriter(block, keyId, stringAllocator, allowStorePointsAndTemporal)); } }
private void AssertCanEncodeAndDecodeToSameValue(object value, int payloadSize) { PropertyBlock target = new PropertyBlock(); bool encoded = ShortArray.encode(0, value, target, payloadSize); assertTrue(encoded); assertEquals(Values.of(value), ShortArray.decode(target)); }
private void AssertCanNotEncode(object intArray, int payloadSize) { assertFalse(ShortArray.encode(0, intArray, new PropertyBlock(), payloadSize)); }