__TSIZE3D::Marshal

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
Компоненты на верхнем уровне \ Подсистема управления \ __TSIZE3D \ Marshal
template <class packed_alloc_t = default_package_allocator>
   package<packed_alloc_t, __TSIZE3D<unit_t, alloc_t>> Marshal(const packed_alloc_t& packed_alloc = packed_alloc_t()) const;
package_const_reference<__TSIZE3D<unit_t, alloc_t>> Marshal(void* pBuffer, size_type cbBuffer) const;

Функция маршаллинга вектора.

  1. Создает и возвращает запаковщик package, управляющий данными и выделенной им для этих данных памятью.
  2. Создает и возвращает запаковщик package_reference, управляющий данными, записываемыми в предоставленный извне буфер. Ответственность за управления буфером в данном случае ложится на вызывающего.
Параметры
packed_allocМенеджер памяти, который должен использоваться объектом package.
[in]pBufferУказатель на буфер памяти, который будет использоваться объектом package_reference для записи в этот буфер запакованного вектора.
cbBufferБайтовый размер предоставленного извне буфера, который должен быть не меньше значения, возвращаемого методом __TSIZE3D::MarshalSize.
Возвращаемое значение:
Созданный запаковщик, с ассоциированным запакованным вектором.

Фактически методы делегируют вызовы конструкторам создаваемых и возвращаемых запаковщиков, package и package_reference соответственно, которые создают и управляют запакованными данными, и, для перегрузки 1, памятью:

template <class packed_alloc_t = default_package_allocator>
   package<packed_alloc_t, __TSIZE3D<unit_t, alloc_t>> Marshal(const packed_alloc_t& packed_alloc = packed_alloc_t()) const
{
   return package<packed_alloc_t, __TSIZE3D<unit_t, alloc_t>>(std::allocator_arg, packed_alloc, *this);
}
package_const_reference<__TSIZE3D<unit_t, alloc_t>> Marshal(_Out_bytecap_(cbBuffer) void* pBuffer, size_type cbBuffer) const
{
   return package_const_reference<__TSIZE3D<unit_t, alloc_t>>(pBuffer, cbBuffer, *this);
}

Вместо вызова данного метода предпочтительнее использовать запаковщик на прямую, либо через вспомогательную функцию make_package.

Возможные исключения
Перегрузка 1 не генерирует исключений, но исключения, сгенерированные менеджером памяти не перехватываются.
Chusov::Exceptions::InsufficientBufferExceptionИсключение, которое может быть сгенерировано перегрузкой 2 в случае, если предоставлен слишком малый буфер pBuffer.
См. также
packageИспользуемый методом запаковщик.
default_package_allocatorИспользуемый запаковщиком менеджер памяти по умолчанию.
AllocatorТребования к пользовательскому менеджеру памяти.