IGeometryModel::Marshal
Версия от 01:36, 3 января 2016; Андрей Чусов (обсуждение | вклад) (Новая страница: «{{NavBar|{{IGeometryModel hierarchy}} \ Marshal}} {{function begin|package<default_package_allocator, IGeometryModel> Marshal() const; package_reference<IGeometry…»)
Шаблон:IGeometryModel hierarchy \ Marshal
package<default_package_allocator, IGeometryModel> Marshal() const;
package_reference<IGeometryModel> Marshal(void* pBuffer, size_type cbBuffer) const;
Шаблон:IGeometryModel Marshal brief
- Выделяет память под хранение запакованных данных, которые управляются запаковщиком package.
- Записывает запакованные данные в предоставленный извне буфер.
- Параметры
[in] pBuffer Указатель на буфер памяти, байтовым размером, как минимум, равным значению, возвращаемому методом IGeometryModel::MarshalSize. Функция заполняет буфер запакованной геометрической моделью. cbBuffer Байтовый размер предоставленного для второй перегрузки буфера данных. - Возвращаемое значение:
- Указатель на реализацию интерфейса IPolyCollection коллекции полигональных элементов геометрической модели среды моделируемого поля. Перегрузка 1 за раз создает смарт объект C++ (см. package), который управляет как запаковкой, так и выделенной им же памятью. Перегрузка 2 позволяет использовать уже существующую память, которая заполняется запакованной геометрической моделью среды моделируемого поля. В обоих случаях полученный пакет данных полностью описывает геометрическую модель и может быть передан удаленным узлам. Вторая перегрузка предполагает, что размер предоставленного буфера задан в байтах параметром cbBuffer. Этот размер должен быть не меньше значения, возвращаемого методом IGeometryModel::MarshalSize. Методы фактически делегируют вызов запаковщику package, на вход которого можно предоставлять геометрическую модель напрямую, без вызова методов.
- Возможные исключения
Chusov::Exceptions::OutOfMemoryException Исключение, которое может быть сгенерировано перегрузкой 1 в случае нехватки памяти. Chusov::Exceptions::InsufficientBufferException Исключение, которое может быть сгенерировано перегрузкой 2 в случае, если предоставлен слишком малый буфер pBuffer. - См. также
package_reference package make_package Функция, позволяющая создание запакованных объектов на основе их типов, полученных дедукцией и с использованием стандартного менеджера памяти std::allocator.
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);