in cppcache/src/SerializationRegistry.cpp [286:381]
std::shared_ptr<Serializable> SerializationRegistry::deserialize(
DataInput& input, int8_t typeId) const {
auto dsCode = static_cast<DSCode>(typeId);
if (typeId == -1) {
dsCode = static_cast<DSCode>(input.read());
}
LOGDEBUG("SerializationRegistry::deserialize typeId = %" PRId8
" dsCode = % " PRId8,
typeId, dsCode);
switch (dsCode) {
case DSCode::CacheableNullString: {
return std::shared_ptr<Serializable>(
CacheableString::createDeserializable());
}
case DSCode::PDX: {
return pdxTypeHandler_->deserialize(input);
}
case DSCode::PDX_ENUM: {
auto enumObject = CacheableEnum::create(" ", " ", 0);
enumObject->fromData(input);
return std::move(enumObject);
}
case DSCode::CacheableUserData:
case DSCode::CacheableUserData2:
case DSCode::CacheableUserData4: {
return dataSerializableHandler_->deserialize(input, dsCode);
}
case DSCode::FixedIDByte:
case DSCode::FixedIDShort:
case DSCode::FixedIDInt: {
return deserializeDataSerializableFixedId(input, dsCode);
}
case DSCode::NullObj: {
return nullptr;
}
case DSCode::FixedIDDefault:
case DSCode::FixedIDNone:
case DSCode::CacheableLinkedList:
case DSCode::Properties:
case DSCode::PdxType:
case DSCode::BooleanArray:
case DSCode::CharArray:
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::CacheableHashTable:
case DSCode::CacheableVector:
case DSCode::CacheableIdentityHashMap:
case DSCode::CacheableLinkedHashSet:
case DSCode::CacheableStack:
case DSCode::CacheableASCIIString:
case DSCode::CacheableASCIIStringHuge:
case DSCode::CacheableStringHuge:
break;
}
TypeFactoryMethod createType = nullptr;
theTypeMap_.findDataSerializablePrimitive(dsCode, createType);
if (createType == nullptr) {
throw IllegalStateException("Unregistered type in deserialization");
}
std::shared_ptr<Serializable> obj(createType());
deserialize(input, obj);
return obj;
}