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

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
(Новая страница: «{{NavBar|{{POINT3DEXT hierarchy}} \ Marshal}} {{function begin|template <class packed_alloc_t {{=}} default_package_allocator> package<packed_alloc_t, __TPOINT…»)
 
м (Андрей Чусов переименовал страницу POINT3DEXT Marshal в TPOINT3D::Marshal без оставления перенаправления)
 
(не показаны 2 промежуточные версии этого же участника)
Строка 1: Строка 1:
{{NavBar|{{POINT3DEXT hierarchy}} \ Marshal}}
{{DISPLAYTITLE:__TPOINT3D::Marshal}}
{{NavBar|{{Системная иерархия:__TPOINT3D}} \ 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, __TPOINT3D<unit_t, alloc_t>> Marshal(const packed_alloc_t& packed_alloc {{=}} packed_alloc_t()) const;|{{POINT3DEXT_Marshal_brief}}}}
   package<packed_alloc_t, __TPOINT3D<unit_t, alloc_t>> Marshal(const packed_alloc_t& packed_alloc {{=}} packed_alloc_t()) const;
package_const_reference<__TPOINT3D<unit_t, alloc_t>> Marshal(void* pBuffer, size_type cbBuffer) const;|{{__TPOINT3D::Marshal_brief}}
 
#Создает и возвращает запаковщик [[package]], управляющий данными и выделенной им для этих данных памятью.
#Создает и возвращает запаковщик [[package_reference]], управляющий данными, записываемыми в предоставленный извне буфер. Ответственность за управления буфером в данном случае ложится на вызывающего.}}
{{function_paramlist begin}}
{{function_paramlist begin}}
{{function_paramlist add|packed_alloc|Менеджер памяти, который должен использоваться объектом [[package]].}}
{{function_paramlist add|packed_alloc|Менеджер памяти, который должен использоваться объектом [[package]].}}
{{function_paramlist add|pBuffer|Указатель на буфер памяти, который будет использоваться объектом [[package_reference]] для записи в этот буфер запакованного вектора.|paramdir=[in]}}
{{function_paramlist add|cbBuffer|Байтовый размер предоставленного извне буфера, который должен быть не меньше значения, возвращаемого методом [[POINT3DEXT_MarshalSize|POINT3DEXT::MarshalSize]].}}
{{function_paramlist end}}
{{function_paramlist end}}
{{function_return_value|Созданный запаковщик, с ассоциированным запакованным вектором.}}
{{function_return_value|Созданный запаковщик, с ассоциированным запакованным вектором.}}
{{function_details|Фактически метод делегирует вызов конструктору создаваемого и возвращаемого запаковщика [[package]] с управляемой им памятью и данными:
{{function_details|Фактически методы делегируют вызовы конструкторам создаваемых и возвращаемых запаковщиков, [[package]] и [[package_reference]] соответственно, которые создают и управляют запакованными данными, и, для перегрузки 1, памятью:
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
return package<packed_alloc_t, __TPOINT3D<unit_t, alloc_t>>(std::allocator_arg, packed_alloc, *this);
template <class packed_alloc_t = default_package_allocator>
  package<packed_alloc_t, __TPOINT3D<unit_t, alloc_t>> Marshal(const packed_alloc_t& packed_alloc = packed_alloc_t()) const
{
  return package<packed_alloc_t, __TPOINT3D<unit_t, alloc_t>>(std::allocator_arg, packed_alloc, *this);
}
package_const_reference<__TPOINT3D<unit_t, alloc_t>> Marshal(_Out_bytecap_(cbBuffer) void* pBuffer, size_type cbBuffer) const
{
  return package_const_reference<__TPOINT3D<unit_t, alloc_t>>(pBuffer, cbBuffer, *this);
}
</syntaxhighlight>
</syntaxhighlight>


Вместо вызова данного метода предпочтительнее использовать запаковщик на прямую, либо через вспомогательную функцию [[make_package]].}}
Вместо вызова данного метода предпочтительнее использовать запаковщик на прямую, либо через вспомогательную функцию [[make_package]].}}
{{function_exceptionlist begin}}
{{function_exceptionlist begin}}
{{function_exceptionlist add||Сам метод не генерирует исключений, но исключения, сгенерированные менеджером памяти не перехватываются..}}
{{function_exceptionlist add||Перегрузка 1 не генерирует исключений, но исключения, сгенерированные менеджером памяти не перехватываются.}}
{{function_exceptionlist add|[http://www.chusov.org/doxygen/struct_chusov_1_1_exceptions_1_1_insufficient_buffer_exception.html Chusov::Exceptions::InsufficientBufferException]|Исключение, которое может быть сгенерировано перегрузкой 2 в случае, если предоставлен слишком малый буфер <tt>pBuffer</tt>.}}
{{function_exceptionlist end}}
{{function_exceptionlist end}}
{{function_sa begin}}
{{function_sa begin}}

Текущая версия на 10:17, 10 января 2016

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

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

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

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

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

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

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