in src/foundation_library/FastContainerUtil.cpp [84:197]
HRESULT CFastContainerUtil::GetPropertyValue(
foundation::PropertyType propertyType,
LPVOID pSlotValue,
foundation::IInspectable **value)
{
if ((propertyType & 0x400) != 0)
{
foundation::library::_ArrayPropertyValueSlot arrayPropertyValueSlot =
ReadSlotValue<foundation::library::_ArrayPropertyValueSlot>(pSlotValue);
PropertyType itemArrayType = (PropertyType)(propertyType & 0xff);
UINT32 size = arrayPropertyValueSlot._size;
LPVOID arrayBuffer = arrayPropertyValueSlot._pArrayBuffer;
switch (itemArrayType)
{
case PropertyType_UInt8:
return pv_util::CreateUInt8ArrayValue(
size,
size ? static_cast<BYTE *>(arrayBuffer) : nullptr, value);
case PropertyType_Int16:
return pv_util::CreateInt16ArrayValue(
size,
size ? static_cast<INT16 *>(arrayBuffer) : nullptr, value);
case PropertyType_UInt16:
return pv_util::CreateUInt16ArrayValue(
size,
size ? static_cast<UINT16 *>(arrayBuffer) : nullptr, value);
case PropertyType_Int32:
return pv_util::CreateInt32ArrayValue(
size,
size ? static_cast<INT32 *>(arrayBuffer) : nullptr, value);
case PropertyType_UInt32:
return pv_util::CreateUInt32ArrayValue(
size,
size ? static_cast<UINT32 *>(arrayBuffer) : nullptr, value);
case PropertyType_Boolean:
return pv_util::CreateBooleanArrayValue(
size,
size ? static_cast<boolean *>(arrayBuffer) : nullptr, value);
case PropertyType_String:
return pv_util::CreateStringArrayValue(
size,
size ? static_cast<HSTRING *>(arrayBuffer) : nullptr, value);
case PropertyType_Inspectable:
return pv_util::CreateInspectableArrayValue(
size,
size ? static_cast<foundation::IInspectable **>(arrayBuffer) : nullptr, value);
case PropertyType_Single:
return pv_util::CreateSingleArrayValue(
size,
size ? static_cast<FLOAT *>(arrayBuffer) : nullptr, value);
case PropertyType_Double:
return pv_util::CreateDoubleArrayValue(
size,
size ? static_cast<DOUBLE *>(arrayBuffer) : nullptr, value);
case PropertyType_Guid:
return pv_util::CreateGuidArrayValue(
size,
size ? static_cast<GUID *>(arrayBuffer) : nullptr, value);
case PropertyType_DateTime:
return pv_util::CreateDateTimeArrayValue(
size,
size ? static_cast<DateTime *>(arrayBuffer) : nullptr, value);
default:
foundation_assert(false);
return E_NOTIMPL;
}
}
else
{
switch (propertyType)
{
case PropertyType_UInt8:
return pv_util::CreateUInt8Value(ReadSlotValue<BYTE>(pSlotValue),value);
case PropertyType_Int16:
return pv_util::CreateInt16Value(ReadSlotValue<INT16>(pSlotValue), value);
case PropertyType_UInt16:
return pv_util::CreateUInt16Value(ReadSlotValue<UINT16>(pSlotValue), value);
case PropertyType_Int32:
return pv_util::CreateInt32Value(ReadSlotValue<INT32>(pSlotValue), value);
case PropertyType_UInt32:
return pv_util::CreateUInt32Value(ReadSlotValue<UINT32>(pSlotValue), value);
case PropertyType_Int64:
return pv_util::CreateInt64Value(ReadSlotValue<INT64>(pSlotValue), value);
case PropertyType_UInt64:
return pv_util::CreateUInt64Value(ReadSlotValue<UINT64>(pSlotValue), value);
case PropertyType_Boolean:
return pv_util::CreateBooleanValue(ReadSlotValue<boolean>(pSlotValue), value);
case PropertyType_String:
return pv_util::CreateStringValue(ReadSlotValue<HSTRING>(pSlotValue), value);
case PropertyType_Inspectable:
*value = ReadSlotValue<foundation::IInspectable *>(pSlotValue);
if (*value)
{
(*value)->AddRef();
}
return S_OK;
case PropertyType_Single:
return pv_util::CreateSingleValue(ReadSlotValue<FLOAT>(pSlotValue), value);
case PropertyType_Double:
return pv_util::CreateDoubleValue(ReadSlotValue<DOUBLE>(pSlotValue), value);
case PropertyType_Guid:
return pv_util::CreateGuidValue(ReadSlotValue<GUID>(pSlotValue), value);
case PropertyType_DateTime:
return pv_util::CreateDateTimeValue(ReadSlotValue<DateTime>(pSlotValue), value);
default:
foundation_assert(false);
return E_NOTIMPL;
}
}
return S_OK;
}