TFACE::Marshal: различия между версиями

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
(Новая страница: «{{NavBar|{{FACE3DEXT hierarchy}} \ Marshal}} {{function begin|template <class packed_alloc_t {{=}} default_package_allocator> package<packed_alloc_t, __TFACE<u…»)
 
Строка 1: Строка 1:
{{NavBar|{{FACE3DEXT hierarchy}} \ Marshal}}
{{DISPLAYTITLE:__TFACE::Marshal}}
{{NavBar|{{Системная иерархия:__TFACE}} \ Marshal}}
{{function begin|template <class packed_alloc_t {{=}} default_package_allocator>
{{function begin|template <class packed_alloc_t {{=}} default_package_allocator>
   package<packed_alloc_t, __TFACE<unit_t, alloc_t>> Marshal(const packed_alloc_t& packed_alloc {{=}} packed_alloc_t()) const;
   package<packed_alloc_t, __TFACE<unit_t, alloc_t>> Marshal(const packed_alloc_t& packed_alloc {{=}} packed_alloc_t()) const;
package_const_reference<__TFACE<unit_t, alloc_t>> Marshal(void* pBuffer, size_type cbBuffer) const;|{{FACE3DEXT_Marshal_brief}}
package_const_reference<__TFACE<unit_t, alloc_t>> Marshal(void* pBuffer, size_type cbBuffer) const;|{{__TFACE::Marshal brief}}


#Создает и возвращает запаковщик [[package]], управляющий данными и выделенной им для этих данных памятью.
#Создает и возвращает запаковщик [[package]], управляющий данными и выделенной им для этих данных памятью.
Строка 9: Строка 10:
{{function_paramlist add|packed_alloc|Менеджер памяти, который должен использоваться объектом [[package]].}}
{{function_paramlist add|packed_alloc|Менеджер памяти, который должен использоваться объектом [[package]].}}
{{function_paramlist add|pBuffer|Указатель на буфер памяти, который будет использоваться объектом [[package_reference]] для записи в этот буфер запакованного полигона.|paramdir=[in]}}
{{function_paramlist add|pBuffer|Указатель на буфер памяти, который будет использоваться объектом [[package_reference]] для записи в этот буфер запакованного полигона.|paramdir=[in]}}
{{function_paramlist add|cbBuffer|Байтовый размер предоставленного извне буфера, который должен быть не меньше значения, возвращаемого методом [[FACE3DEXT_MarshalSize|FACE3DEXT::MarshalSize]].}}
{{function_paramlist add|cbBuffer|Байтовый размер предоставленного извне буфера, который должен быть не меньше значения, возвращаемого методом [[__TFACE::MarshalSize]].}}
{{function_paramlist end}}
{{function_paramlist end}}
{{function_return_value|Созданный запаковщик, с ассоциированным запакованным полигоном.}}
{{function_return_value|Созданный запаковщик, с ассоциированным запакованным полигоном.}}

Версия 06:55, 11 января 2016

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

Функция маршаллинга полигона.

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

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

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

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

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