IPlainObject::Marshal: различия между версиями
Перейти к навигации
Перейти к поиску
(Новая страница: «{{NavBar|{{IPlainObject hierarchy}} \ Marshal}} {{function begin|package<default_package_allocator, IPlainObject> Marshal() const; package_reference<IPlainObject>…») |
м (Андрей Чусов переименовал страницу IPlainObject Marshal в IPlainObject::Marshal без оставления перенаправления) |
||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
{{NavBar|{{IPlainObject | {{NavBar|{{Системная иерархия:IPlainObject}} \ Marshal}} | ||
{{function begin|package<default_package_allocator, IPlainObject> Marshal() const; | {{function begin|package<default_package_allocator, IPlainObject> Marshal() const; | ||
package_reference<IPlainObject> Marshal(void* pBuffer, size_type cbBuffer) const;|{{ | package_reference<IPlainObject> Marshal(void* pBuffer, size_type cbBuffer) const;|{{IPlainObject::Marshal brief}} | ||
# Выделяет память под хранение запакованных данных, которые управляются запаковщиком [[package]]. | # Выделяет память под хранение запакованных данных, которые управляются запаковщиком [[package]]. | ||
# Записывает запакованные данные в предоставленный извне буфер. | # Записывает запакованные данные в предоставленный извне буфер. | ||
}} | }} | ||
{{function_paramlist begin}} | {{function_paramlist begin}} | ||
{{function_paramlist add|pBuffer|Указатель на буфер памяти, байтовым размером, как минимум, равным значению, возвращаемому методом [[ | {{function_paramlist add|pBuffer|Указатель на буфер памяти, байтовым размером, как минимум, равным значению, возвращаемому методом [[IPlainObject::MarshalSize]]. Функция заполняет буфер запакованной секущей плоскостью вывода результатов моделирования.|paramdir=[in]}} | ||
{{function_paramlist add|cbBuffer|Байтовый размер предоставленного для второй перегрузки буфера данных.}} | {{function_paramlist add|cbBuffer|Байтовый размер предоставленного для второй перегрузки буфера данных.}} | ||
{{function_paramlist end}} | {{function_paramlist end}} | ||
{{function return_value | {{function return_value| | ||
Объект, управляющий запакованным пакетом данных. Первая перегрузка, в отличие от второй, возвращает объект, также управляющий буфером, хранящим запакованные данные, и автоматически освобождает память при деструкции возвращенного объекта. Вторая перегрузка управляет только данными, но ответственность за освобождения памяти буфера ложится на вызывающего.}} | Объект, управляющий запакованным пакетом данных. Первая перегрузка, в отличие от второй, возвращает объект, также управляющий буфером, хранящим запакованные данные, и автоматически освобождает память при деструкции возвращенного объекта. Вторая перегрузка управляет только данными, но ответственность за освобождения памяти буфера ложится на вызывающего.}} | ||
{{function details | {{function details | ||
|Перегрузка 1 | |Перегрузка 1 создает смарт объект C++ (см. [[package]]), который управляет как запаковкой, так и выделенной им же памятью. Перегрузка 2 позволяет использовать уже существующую память, которая заполняется запакованной плоскостью вывода результатов моделирования. | ||
В обоих случаях полученный пакет данных описывает геометрические параметры плоскости, однако сами результаты в запакованные данные не включаются. | В обоих случаях полученный пакет данных описывает геометрические параметры плоскости, однако сами результаты в запакованные данные не включаются. | ||
Вторая перегрузка предполагает, что размер предоставленного буфера задан в байтах параметром <tt>cbBuffer</tt>. Этот размер должен быть не меньше значения, возвращаемого методом [[ | Вторая перегрузка предполагает, что размер предоставленного буфера задан в байтах параметром <tt>cbBuffer</tt>. Этот размер должен быть не меньше значения, возвращаемого методом [[IPlainObject::MarshalSize]]. | ||
Методы фактически делегируют вызов запаковщику [[package]], на вход которого можно предоставлять экземпляр плоскости напрямую, без вызова методов. | Методы фактически делегируют вызов запаковщику [[package]], на вход которого можно предоставлять экземпляр плоскости напрямую, без вызова методов. | ||
Строка 24: | Строка 24: | ||
const IPlainObject& plain = get(); //какой-то метод возвращающий read-only ссылку на модель | const IPlainObject& plain = get(); //какой-то метод возвращающий read-only ссылку на модель | ||
auto pckg = package<std::allocator, IPlainObject> (plain); //аналогично вызову | auto pckg = package<std::allocator, IPlainObject> (plain); //аналогично вызову plain.Marshal(); | ||
auto buffer_size = package_reference<IPlainObject>::calculate_size(plain); //аналогично | auto buffer_size = package_reference<IPlainObject>::calculate_size(plain); //аналогично plain.MarshalSize(); | ||
auto buffer = new std::uint8_t [buffer_size]; | auto buffer = new std::uint8_t [buffer_size]; | ||
auto pckg_ref = package_reference<IPlainObject> (buffer, buffer_size, plain); //аналогично вызову | auto pckg_ref = package_reference<IPlainObject> (buffer, buffer_size, plain); //аналогично вызову plain.Marshal(buffer, buffer_size); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} |
Текущая версия на 05:14, 10 января 2016
package<default_package_allocator, IPlainObject> Marshal() const;
package_reference<IPlainObject> Marshal(void* pBuffer, size_type cbBuffer) const;
Функция маршаллинга описания плоскости выводов результатов моделирования без включения самих результатов.
- Выделяет память под хранение запакованных данных, которые управляются запаковщиком package.
- Записывает запакованные данные в предоставленный извне буфер.
- Параметры
[in] pBuffer Указатель на буфер памяти, байтовым размером, как минимум, равным значению, возвращаемому методом IPlainObject::MarshalSize. Функция заполняет буфер запакованной секущей плоскостью вывода результатов моделирования. cbBuffer Байтовый размер предоставленного для второй перегрузки буфера данных. - Возвращаемое значение:
- Объект, управляющий запакованным пакетом данных. Первая перегрузка, в отличие от второй, возвращает объект, также управляющий буфером, хранящим запакованные данные, и автоматически освобождает память при деструкции возвращенного объекта. Вторая перегрузка управляет только данными, но ответственность за освобождения памяти буфера ложится на вызывающего. Перегрузка 1 создает смарт объект C++ (см. package), который управляет как запаковкой, так и выделенной им же памятью. Перегрузка 2 позволяет использовать уже существующую память, которая заполняется запакованной плоскостью вывода результатов моделирования. В обоих случаях полученный пакет данных описывает геометрические параметры плоскости, однако сами результаты в запакованные данные не включаются. Вторая перегрузка предполагает, что размер предоставленного буфера задан в байтах параметром cbBuffer. Этот размер должен быть не меньше значения, возвращаемого методом IPlainObject::MarshalSize. Методы фактически делегируют вызов запаковщику package, на вход которого можно предоставлять экземпляр плоскости напрямую, без вызова методов.
- Возможные исключения
Chusov::Exceptions::OutOfMemoryException Исключение, которое может быть сгенерировано перегрузкой 1 в случае нехватки памяти. Chusov::Exceptions::InsufficientBufferException Исключение, которое может быть сгенерировано перегрузкой 2 в случае, если предоставлен слишком малый буфер pBuffer. - См. также
package_reference package make_package Функция, позволяющая создание запакованных объектов на основе их типов, полученных дедукцией и с использованием стандартного менеджера памяти std::allocator.
using namespace CAMaaS;
const IPlainObject& plain = get(); //какой-то метод возвращающий read-only ссылку на модель
auto pckg = package<std::allocator, IPlainObject> (plain); //аналогично вызову plain.Marshal();
auto buffer_size = package_reference<IPlainObject>::calculate_size(plain); //аналогично plain.MarshalSize();
auto buffer = new std::uint8_t [buffer_size];
auto pckg_ref = package_reference<IPlainObject> (buffer, buffer_size, plain); //аналогично вызову plain.Marshal(buffer, buffer_size);