in src/foundation/PropertyValueInternalStatics.cpp [516:693]
HRESULT CPropertyValueInternalStatics::Deserialize(
std::istream& is,
PropertyType type,
IPropertyValue **ppPropertyValue)
{
foundation_assert(ppPropertyValue);
binary_deserializer bis(is);
foundation::InspectablePtr spValue;
switch (type)
{
case PropertyType_Empty:
IFR_ASSERT(pv_util::CreateEmptyValue(spValue.GetAddressOf()));
break;
case PropertyType_UInt8:
{
UINT8 value = bis.deserializeByte();
IFR_ASSERT(pv_util::CreateUInt8Value(value,spValue.GetAddressOf()));
}
break;
case PropertyType_Int16:
{
INT16 value = bis.deserializeInt16();
IFR_ASSERT(pv_util::CreateInt16Value(value,spValue.GetAddressOf()));
}
break;
case PropertyType_UInt16:
{
UINT16 value = bis.deserializeUInt16();
IFR_ASSERT(pv_util::CreateUInt16Value(value,spValue.GetAddressOf()));
}
break;
case PropertyType_Int32:
{
INT32 value = bis.deserializeInt();
IFR_ASSERT(pv_util::CreateInt32Value(value,spValue.GetAddressOf()));
}
break;
case PropertyType_UInt32:
{
UINT32 value = bis.deserializeUInt();
IFR_ASSERT(pv_util::CreateUInt32Value(value,spValue.GetAddressOf()));
}
break;
case PropertyType_Int64:
{
INT64 value = bis.deserializeInt64();
IFR_ASSERT(pv_util::CreateInt64Value(value,spValue.GetAddressOf()));
}
break;
case PropertyType_UInt64:
{
UINT64 value = bis.deserializeUInt64();
IFR_ASSERT(pv_util::CreateUInt64Value(value,spValue.GetAddressOf()));
}
break;
case PropertyType_Single:
{
FLOAT value = bis.deserializeSingle();
IFR_ASSERT(pv_util::CreateSingleValue(value,spValue.GetAddressOf()));
}
break;
case PropertyType_Double:
{
DOUBLE value = bis.deserializeDouble();
IFR_ASSERT(pv_util::CreateDoubleValue(value,spValue.GetAddressOf()));
}
break;
case PropertyType_Char16:
{
WCHAR value = bis.deserializeChar16();
IFR_ASSERT(pv_util::CreateChar16Value(value,spValue.GetAddressOf()));
}
break;
case PropertyType_Boolean:
{
boolean boolValue = bis.deserializeBoolean();
IFR_ASSERT(pv_util::CreateBooleanValue(boolValue,spValue.GetAddressOf()));
}
break;
case PropertyType_String:
{
foundation::string_t s = bis.deserializeString();
IFR_ASSERT(pv_util::CreateStringValue(s.c_str(),spValue.GetAddressOf()));
}
break;
case PropertyType_Guid:
{
IID iid = bis.deserializeIID();
IFR_ASSERT(pv_util::CreateGuidValue(iid,spValue.GetAddressOf()));
}
break;
case PropertyType_DateTime:
{
foundation::DateTime dt;
bis.get_istream().read((char *)&dt,sizeof(foundation::DateTime));
IFR_ASSERT(pv_util::CreateDateTimeValue(dt,spValue.GetAddressOf()));
}
break;
case PropertyType_UInt8Array:
{
DeserializeArray<foundation::UInt8ArrayWrapper,BYTE,&IPropertyValueStatics::CreateUInt8Array>(bis,spValue.GetAddressOf());
}
break;
case PropertyType_Int16Array:
{
DeserializeArray<foundation::Int16ArrayWrapper,INT16,&IPropertyValueStatics::CreateInt16Array>(bis,spValue.GetAddressOf());
}
break;
case PropertyType_UInt16Array:
{
DeserializeArray<foundation::UInt16ArrayWrapper,UINT16,&IPropertyValueStatics::CreateUInt16Array>(bis,spValue.GetAddressOf());
}
break;
case PropertyType_Int32Array:
{
DeserializeArray<foundation::Int32ArrayWrapper,INT32,&IPropertyValueStatics::CreateInt32Array>(bis,spValue.GetAddressOf());
}
break;
case PropertyType_UInt32Array:
{
DeserializeArray<foundation::UInt32ArrayWrapper,UINT32,&IPropertyValueStatics::CreateUInt32Array>(bis,spValue.GetAddressOf());
}
break;
case PropertyType_Int64Array:
{
DeserializeArray<foundation::Int64ArrayWrapper,INT64,&IPropertyValueStatics::CreateInt64Array>(bis,spValue.GetAddressOf());
}
break;
case PropertyType_UInt64Array:
{
DeserializeArray<foundation::UInt64ArrayWrapper,UINT64,&IPropertyValueStatics::CreateUInt64Array>(bis,spValue.GetAddressOf());
}
break;
case PropertyType_SingleArray:
{
DeserializeArray<foundation::SingleArrayWrapper,FLOAT,&IPropertyValueStatics::CreateSingleArray>(bis,spValue.GetAddressOf());
}
break;
case PropertyType_DoubleArray:
{
DeserializeArray<foundation::DoubleArrayWrapper,DOUBLE,&IPropertyValueStatics::CreateDoubleArray>(bis,spValue.GetAddressOf());
}
break;
case PropertyType_BooleanArray:
{
DeserializeArray<foundation::ArrayWrapper<boolean>,boolean,&IPropertyValueStatics::CreateBooleanArray>(bis,spValue.GetAddressOf());
}
break;
case PropertyType_StringArray:
{
UINT32 size = bis.deserializeUInt();
std::vector<foundation::HStringPtr> hstring_array;
hstring_array.resize(size);
for (UINT32 index = 0; index < hstring_array.size(); ++index)
{
foundation::string_t str = bis.deserializeString();
hstring_array[index] = foundation::HStringPtr(str.c_str());
}
IFR_ASSERT(pv_util::CreateStringArrayValue(
(UINT32)hstring_array.size(),
hstring_array.size() ? (HSTRING *)hstring_array.front().GetAddressOfPtr() : nullptr, spValue.GetAddressOf()));
}
break;
case PropertyType_Inspectable:
case PropertyType_TimeSpan:
case PropertyType_Point:
case PropertyType_Size:
case PropertyType_Rect:
default:
foundation_assert(false);
return E_NOTIMPL;
}
foundation_assert(spValue != nullptr);
IFR_ASSERT(foundation::QueryInterface(spValue,foundation_IID_IPropertyValue,ppPropertyValue));
return S_OK;
}