2013-03-27 2 views
0

Существует два типа 3D-полисов в CGAL, Polyhedron и Nef_polyhedron. Бывший позволяет указать аллокатора в качестве четвертого шаблона:Как я могу использовать распределитель Interprocess Boost с CGAL Nef_polyhedron_3?

http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Polyhedron/Chapter_main.html#Subsection_25.3.5

Однако Nef_polyhedron_3 не похоже, что.

Что он имеет, однако, iostream операторы, для разбора в/из внутреннего представления строки:

https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Nef_3/SNC_io_parser.h

Но это происходит крайне медленно, действительно.

Однако, глядя на этот код анализатора SNC, он, по-видимому, по-прежнему использует распределитель для своей внутренней структуры (объект snc). Но даже если бы я мог выделить их для моего статического буфера (который должен быть передан другому процессу), я не вижу ничего в конструкторах или аксессуарах Nef_polyhedron_3, которые позволяют мне его восстановить.

EDIT: Глядя на это немного дальше, я заметил, ИМЕЕТСЯ конструктор из stucture SNC https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Nef_polyhedron_3.h:

Nef_polyhedron_3(const SNC_structure& W, SNC_point_locator* _pl, 
      bool clone_pl, 
      bool clone_snc) { 

И SNC_structure использует распределители для своих внутренних данных (но не для себя):

https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Nef_3/SNC_structure.h

Беда в том, что, как представляется, устанавливаются только на основе времени компиляции - нужно только выделить конкретный буфер для полигонов я знаю, мне нужно отправить другой процесс.

EDIT 2: Я просто заметил, что один из суперкласса Nef_polyhedron_3 является Handle_for:

class Nef_polyhedron_3 : public CGAL::Handle_for< Nef_polyhedron_3_rep<Kernel_, Items_, Mark_> >, 
      public SNC_const_decorator<SNC_structure<Kernel_,Items_,Mark_> > 

В то, что сам использует аллокатора тоже:

https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Handle_for.h

Я до сих пор неясно, как именно я подключаю это.

Marcos

ответ

0

Nef_polyhedron_3 в настоящее время не поддерживает пользовательский распределитель. Тем не менее, CGAL можно использовать другой распределитель через макрос CGAL_ALLOCATOR. Однако это повлияет на все заголовки CGAL, которые могут быть слишком большими. Тем не менее, должно быть возможно добавить поддержку распределителя к существующему коду без особых проблем.

+0

Спасибо. Как я уже говорил выше, у Notf'3 нет поддержки пользовательских распределителей. Кроме того, я понимаю, что есть макрос (отсюда и мой комментарий о времени компиляции). Вы говорите, что можно добавить без особых проблем, но я действительно ищу что-то более конкретное, если это возможно. –

+0

Еще одна идея, которую я хотел бы сделать, - добавить глобальный CGAL_ALLOCATOR, но иметь возможность установить его в определенном режиме. В режиме по умолчанию он просто передаст std :: allocator. Но в другом режиме он будет использовать статический буфер, который вы передали ранее. –

Смежные вопросы