如何将Boost进程间分配器与CGAL Nef_polyhedron_3一起使用?

时间:2013-03-27 18:45:12

标签: boost interprocess cgal

CGAL,Polyhedron和Nef_polyhedron中有两种类型的3D多边形。前者允许指定分配器作为其第四个模板:

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构造函数或访问器函数中看到任何允许我重构它的东西。

编辑:再深入研究一下,我注意到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

麻烦的是,这似乎只是在编译时设置 - 我只需要分配给一个特定的缓冲区,我知道我需要发送到另一个进程。

编辑2:我刚注意到其中一个Nef_polyhedron_3超类是H​​andle_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

我仍然不清楚我是如何插入的。

马科斯

1 个答案:

答案 0 :(得分:0)

Nef_polyhedron_3目前不支持自定义分配器。但是,可以通过CGAL_ALLOCATOR宏使CGAL使用不同的分配器。但是,这会影响所有可能过多的CGAL标题。但是,应该可以在不太麻烦的情况下为现有代码添加分配器支持。