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

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
(Исправление для нулевого кода return_code_t и включение PLATFORM_NATIVE_CALLING_CONVENTION в интерфейсы.)
 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
{{NavBar|{{IGeometryModel hierarchy}} \ Marshal}}
{{NavBar|{{Системная иерархия:IGeometryModel}} \ Marshal}}
{{function begin|package<default_package_allocator, IGeometryModel> Marshal() const;
{{function begin|return_code_t PLATFORM_NATIVE_CALLING_CONVENTION Marshal(const char* pDomainName, size_type cchDomainName, std::uint32_t nFormat, IOutputStream* pOs) const noexcept;|{{IGeometryModel::Marshal brief}}}}
package_reference<IGeometryModel> Marshal(void* pBuffer, size_type cbBuffer) const;|{{IGeometryModel_Marshal_brief}}
# Выделяет память под хранение запакованных данных, которые управляются запаковщиком [[package]].
# Записывает запакованные данные в предоставленный извне буфер.
}}
{{function_paramlist begin}}
{{function_paramlist begin}}
{{function_paramlist add|pBuffer|Указатель на буфер памяти, байтовым размером, как минимум, равным значению, возвращаемому методом [[IGeometryModel_MarshalSize|IGeometryModel::MarshalSize]]. Функция заполняет буфер запакованной геометрической моделью.|paramdir=[in]}}
{{function_paramlist add|pDomainName|[[Имя подсистемы предметной области]], для которой осуществляется маршаллинг. UTF-8 строка размером <tt>cchDomainName</tt> байт.|paramdir=[in]}}
{{function_paramlist add|cbBuffer|Байтовый размер предоставленного для второй перегрузки буфера данных.}}
{{function_paramlist add|cchDomainName|Размер имени в байтах.}}
{{function_paramlist add|nFormat|Формат запакованных данных. {{ModelDefinitionFormat}}}}
{{function_paramlist add|pOs|[[IOutputStream|Выходной поток данных]], в который осуществляется маршаллинг. Поток должен быть преобразуем в [[IOutputByteStream]].|paramdir=[in]}}
{{function_paramlist end}}
{{function_paramlist end}}
{{function return_value|
{{function return_value|32-битовый беззнаковый целый код ошибки, который в случае успешного выполнения неотрицателен.}}
Объект, управляющий запакованным пакетом данных. Первая перегрузка, в отличие от второй, возвращает объект, также управляющий буфером, хранящим запакованные данные, и автоматически освобождает память при деструкции возвращенного объекта. Вторая перегрузка управляет только данными, но ответственность за освобождения памяти буфера ложится на вызывающего.}}
{{function details
|Перегрузка 1 за раз создает смарт объект C++ (см. [[package]]), который управляет как запаковкой, так и выделенной им же памятью. Перегрузка 2 позволяет использовать уже существующую память, которая заполняется запакованной геометрической моделью среды моделируемого поля. В обоих случаях полученный пакет данных полностью описывает геометрическую модель и может быть передан удаленным узлам.
 
Вторая перегрузка предполагает, что размер предоставленного буфера задан в байтах параметром <tt>cbBuffer</tt>. Этот размер должен быть не меньше значения, возвращаемого методом [[IGeometryModel_MarshalSize|IGeometryModel::MarshalSize]].
 
Методы фактически делегируют вызов запаковщику [[package]], на вход которого можно предоставлять геометрическую модель напрямую, без вызова методов.
<syntaxhighlight lang=cpp>
using namespace CAMaaS;
 
const IGeometryModel& geom = get(); //какой-то метод возвращающий read-only ссылку на модель
 
auto pckg = package<std::allocator, IGeometryModel> (geom); //аналогично вызову geom.Marshal();
 
auto buffer_size = package_reference<IGeometryModel>::calculate_size(geom); //аналогично geom.MarshalSize();
auto buffer = new std::uint8_t [buffer_size];
auto pckg_ref = package_reference<IGeometryModel> (buffer, buffer_size, geom); //аналогично вызову geom.Marshal(buffer, buffer_size);
</syntaxhighlight>
}}
{{function_exceptionlist begin}}
{{function_exceptionlist add|[http://www.chusov.org/doxygen/struct_chusov_1_1_exceptions_1_1_out_of_memory_exception.html Chusov::Exceptions::OutOfMemoryException]|Исключение, которое может быть сгенерировано перегрузкой 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_sa begin}}
{{function_sa begin}}
{{function_sa add|[[package_reference]]}}
{{function_sa add|[[IGeometryModel]]|{{IGeometryModel brief}}}}
{{function_sa add|[[package]]}}
{{function_sa add|[[LoadGeometryModelForDomain]]|{{LoadGeometryModelForDomain brief}}}}
{{function_sa add|[[make_package]]|Функция, позволяющая создание запакованных объектов на основе их типов, полученных дедукцией и с использованием стандартного менеджера памяти [http://en.cppreference.com/w/cpp/memory/allocator std::allocator].}}
{{function_sa end}}
{{function_sa end}}
{{function end}}
{{function end}}

Текущая версия на 00:49, 18 декабря 2017

Компоненты на верхнем уровне \ Подсистема управления \ IGeometryModel \ Marshal
return_code_t PLATFORM_NATIVE_CALLING_CONVENTION Marshal(const char* pDomainName, size_type cchDomainName, std::uint32_t nFormat, IOutputStream* pOs) const noexcept;

Функция маршаллинга геометрической модели.

Параметры
[in]pDomainNameИмя подсистемы предметной области, для которой осуществляется маршаллинг. UTF-8 строка размером cchDomainName байт.
cchDomainNameРазмер имени в байтах.
nFormatФормат запакованных данных.
Символическое имяЦелочисленное значениеОписание
OBJECT_BINARY1Бинарное представление модели. См. package.
OBJECT_XML2XML описание модели. Не поддерживается.
[in]pOsВыходной поток данных, в который осуществляется маршаллинг. Поток должен быть преобразуем в IOutputByteStream.
Возвращаемое значение:
32-битовый беззнаковый целый код ошибки, который в случае успешного выполнения неотрицателен.
См. также
IGeometryModelИнтерфейс геометрической модели среды моделируемого физического поля.
LoadGeometryModelForDomainОсуществляет чтение геометрической модели, запакованной в поток для заданной подсистемы предметной области.