2013-03-27 77 views
0

CGAL,Polyhedron和Nef_polyhedron中有三種3D多邊形。前者允許指定一個allocator作爲其第四模板:如何在CGAL Nef_polyhedron_3中使用Boost Interprocess分配器?

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 stucture 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使用allocator用於其內部數據(但不包括本身):

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

麻煩的是,這似乎只能在編譯時間的基礎上設置 - 我只需要分配到一個特定的緩衝,因爲我知道我需要發送到另一個進程的多邊形。

編輯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

我還不清楚我究竟該插件英寸

馬科斯

回答

0

Nef_polyhedron_3目前不支持自定義分配器。但是,可以通過CGAL_ALLOCATOR宏使CGAL使用不同的分配器。但是,這會影響所有可能太多的CGAL標題。但是,應該可以在不增加任何麻煩的情況下將分配器支持添加到現有代碼中。

+0

謝謝。正如我上面所說,知道Nef'3沒有自定義分配器的支持。另外,我意識到這是宏(因此我對上面的'編譯時間'的評論)。你說應該可以添加沒有太多的麻煩,但我真的想找更具體的東西,如果可能的話。 – 2013-03-28 08:12:23

+0

我有一個進一步的想法是繼續前進並添加全局CGAL_ALLOCATOR,但能夠將其設置爲某種模式。在默認模式下,它只是委託給一個std :: allocator。但在另一種模式下,它會使用您之前傳遞過來的靜態緩衝區。 – 2013-03-28 08:14:00

相關問題