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

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
(Новая страница: «{{NavBar|{{ISourceObject hierarchy}} \ Marshal}} {{function begin|package<default_package_allocator, ISourceObject> Marshal() const; package_reference<ISourceObje…»)
 
м (Андрей Чусов переименовал страницу ISourceObject Marshal в ISourceObject::Marshal без оставления перенаправления)
 
(не показана 1 промежуточная версия этого же участника)
Строка 1: Строка 1:
{{NavBar|{{ISourceObject hierarchy}} \ Marshal}}
{{NavBar|{{Системная иерархия:ISourceObject}} \ Marshal}}
{{function begin|package<default_package_allocator, ISourceObject> Marshal() const;
{{function begin|package<default_package_allocator, ISourceObject> Marshal() const;
package_reference<ISourceObject> Marshal(void* pBuffer, size_type cbBuffer) const;|{{ISourceObject_Marshal_brief}}
package_reference<ISourceObject> Marshal(void* pBuffer, size_type cbBuffer) const;|{{ISourceObject::Marshal_brief}}
# Выделяет память под хранение запакованных данных, которые управляются запаковщиком [[package]].
# Выделяет память под хранение запакованных данных, которые управляются запаковщиком [[package]].
# Записывает запакованные данные в предоставленный извне буфер.
# Записывает запакованные данные в предоставленный извне буфер.
}}
}}
{{function_paramlist begin}}
{{function_paramlist begin}}
{{function_paramlist add|pBuffer|Указатель на буфер памяти, байтовым размером, как минимум, равным значению, возвращаемому методом [[ISourceObject_MarshalSize|ISourceObject::MarshalSize]]. Функция заполняет буфер запакованным источником моделируемого поля.|paramdir=[in]}}
{{function_paramlist add|pBuffer|Указатель на буфер памяти, байтовым размером, как минимум, равным значению, возвращаемому методом [[ISourceObject::MarshalSize]]. Функция заполняет буфер запакованным источником моделируемого поля.|paramdir=[in]}}
{{function_paramlist add|cbBuffer|Байтовый размер предоставленного для второй перегрузки буфера данных.}}
{{function_paramlist add|cbBuffer|Байтовый размер предоставленного для второй перегрузки буфера данных.}}
{{function_paramlist end}}
{{function_paramlist end}}
Строка 14: Строка 14:
|Перегрузка 1 создает смарт объект C++ (см. [[package]]), который управляет как запаковкой, так и выделенной им же памятью. Перегрузка 2 позволяет использовать уже существующую память, которая заполняется запакованным источником поля.
|Перегрузка 1 создает смарт объект C++ (см. [[package]]), который управляет как запаковкой, так и выделенной им же памятью. Перегрузка 2 позволяет использовать уже существующую память, которая заполняется запакованным источником поля.


Вторая перегрузка предполагает, что размер предоставленного буфера задан в байтах параметром <tt>cbBuffer</tt>. Этот размер должен быть не меньше значения, возвращаемого методом [[ISourceObject_MarshalSize|ISourceObject::MarshalSize]].
Вторая перегрузка предполагает, что размер предоставленного буфера задан в байтах параметром <tt>cbBuffer</tt>. Этот размер должен быть не меньше значения, возвращаемого методом [[ISourceObject::MarshalSize]].


Методы фактически делегируют вызов запаковщику [[package]], на вход которого можно предоставлять экземпляр плоскости напрямую, без вызова методов.
Методы фактически делегируют вызов запаковщику [[package]], на вход которого можно предоставлять экземпляр плоскости напрямую, без вызова методов.

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

Компоненты на верхнем уровне \ Подсистема управления \ ISourceObject \ Marshal
package<default_package_allocator, ISourceObject> Marshal() const;
package_reference<ISourceObject> Marshal(void* pBuffer, size_type cbBuffer) const;

Функция маршаллинга источника физического поля.

  1. Выделяет память под хранение запакованных данных, которые управляются запаковщиком package.
  2. Записывает запакованные данные в предоставленный извне буфер.
Параметры
[in]pBufferУказатель на буфер памяти, байтовым размером, как минимум, равным значению, возвращаемому методом ISourceObject::MarshalSize. Функция заполняет буфер запакованным источником моделируемого поля.
cbBufferБайтовый размер предоставленного для второй перегрузки буфера данных.
Возвращаемое значение:
Объект, управляющий запакованным пакетом данных. Первая перегрузка, в отличие от второй, возвращает объект, также управляющий буфером, хранящим запакованные данные, и автоматически освобождает память при деструкции возвращенного объекта. Вторая перегрузка управляет только данными, но ответственность за освобождение памяти буфера ложится на вызывающего.
Перегрузка 1 создает смарт объект C++ (см. package), который управляет как запаковкой, так и выделенной им же памятью. Перегрузка 2 позволяет использовать уже существующую память, которая заполняется запакованным источником поля. Вторая перегрузка предполагает, что размер предоставленного буфера задан в байтах параметром cbBuffer. Этот размер должен быть не меньше значения, возвращаемого методом ISourceObject::MarshalSize. Методы фактически делегируют вызов запаковщику package, на вход которого можно предоставлять экземпляр плоскости напрямую, без вызова методов.
using namespace CAMaaS;

const ISourceObject& src = get(); //какой-то метод возвращающий read-only ссылку на модель

auto pckg = package<std::allocator, ISourceObject> (src); //аналогично вызову src.Marshal();

auto buffer_size = package_reference<ISourceObject>::calculate_size(src); //аналогично src.MarshalSize();
auto buffer = new std::uint8_t [buffer_size];
auto pckg_ref = package_reference<ISourceObject> (buffer, buffer_size, src); //аналогично вызову src.Marshal(buffer, buffer_size);
Возможные исключения
Chusov::Exceptions::OutOfMemoryExceptionИсключение, которое может быть сгенерировано перегрузкой 1 в случае нехватки памяти.
Chusov::Exceptions::InsufficientBufferExceptionИсключение, которое может быть сгенерировано перегрузкой 2 в случае, если предоставлен слишком малый буфер pBuffer.
См. также
package_reference
package
make_packageФункция, позволяющая создание запакованных объектов на основе их типов, полученных дедукцией и с использованием стандартного менеджера памяти std::allocator.