in cppcache/src/SerializationRegistry.cpp [757:835]
void DataSerializableHandler::serialize(
const std::shared_ptr<DataSerializable>& dataSerializable,
DataOutput& dataOutput, bool isDelta) const {
auto&& cacheImpl = CacheRegionHelper::getCacheImpl(dataOutput.getCache());
auto&& type = dataSerializable->getType();
auto&& objectId =
cacheImpl->getSerializationRegistry()->getIdForDataSerializableType(type);
auto&& dsCode = SerializationRegistry::getSerializableDataDsCode(objectId);
dataOutput.write(static_cast<int8_t>(dsCode));
switch (dsCode) {
case DSCode::CacheableUserData:
dataOutput.write(static_cast<int8_t>(objectId));
break;
case DSCode::CacheableUserData2:
dataOutput.writeInt(static_cast<int16_t>(objectId));
break;
case DSCode::CacheableUserData4:
dataOutput.writeInt(static_cast<int32_t>(objectId));
break;
case DSCode::FixedIDDefault:
case DSCode::FixedIDByte:
case DSCode::FixedIDInt:
case DSCode::FixedIDNone:
case DSCode::FixedIDShort:
case DSCode::CacheableLinkedList:
case DSCode::Properties:
case DSCode::PdxType:
case DSCode::BooleanArray:
case DSCode::CharArray:
case DSCode::NullObj:
case DSCode::CacheableString:
case DSCode::Class:
case DSCode::JavaSerializable:
case DSCode::DataSerializable:
case DSCode::CacheableBytes:
case DSCode::CacheableInt16Array:
case DSCode::CacheableInt32Array:
case DSCode::CacheableInt64Array:
case DSCode::CacheableFloatArray:
case DSCode::CacheableDoubleArray:
case DSCode::CacheableObjectArray:
case DSCode::CacheableBoolean:
case DSCode::CacheableCharacter:
case DSCode::CacheableByte:
case DSCode::CacheableInt16:
case DSCode::CacheableInt32:
case DSCode::CacheableInt64:
case DSCode::CacheableFloat:
case DSCode::CacheableDouble:
case DSCode::CacheableDate:
case DSCode::CacheableFileName:
case DSCode::CacheableStringArray:
case DSCode::CacheableArrayList:
case DSCode::CacheableHashSet:
case DSCode::CacheableHashMap:
case DSCode::CacheableTimeUnit:
case DSCode::CacheableNullString:
case DSCode::CacheableHashTable:
case DSCode::CacheableVector:
case DSCode::CacheableIdentityHashMap:
case DSCode::CacheableLinkedHashSet:
case DSCode::CacheableStack:
case DSCode::CacheableASCIIString:
case DSCode::CacheableASCIIStringHuge:
case DSCode::CacheableStringHuge:
case DSCode::PDX_ENUM:
case DSCode::PDX:
IllegalStateException("Invalid DS Code.");
}
if (isDelta) {
const Delta* ptr = dynamic_cast<const Delta*>(dataSerializable.get());
ptr->toDelta(dataOutput);
} else {
dataSerializable->toData(dataOutput);
}
}