現在、複雑な CGAL オブジェクト インスタンスを別のプロセスに転送する方法をいくつか調査しています。別の投稿で、カスタム アロケーターについて質問しましたが、別の方法は文字列ストリームです。(参考までに、共有メモリはオプションではありません)
現在の CGAL::Nef_polyhedron_3 は iostreaming を提供します:
// In main process
Nef_polyhedron_3 NP3;
stringstream ss;
ss << NP3;
sendToOtherProcess(ss.str());
// In separate process
stringstream ss(stringFromOtherProcess);
Nef_polyhedron_3 NP3;
ss >> NP3;
現在、出力ストリーミングは遅く、入力ストリーミングは 4 倍遅くなっています。
その理由は(私は推測していますが)すべてのキャスティングです。それを行うクラスはここにあります: https://github.ugent.be/divhaere/cgal/blob/master/include/CGAL/Nef_3/SNC_io_parser.h
クラスのメンバーの 1 つのスニペットを取得するには (ln 1481):
in >> hx >> hy >> hz >> hw;
vh->point() = Point_3(hx,hy,hz,hw);
何千ものポイントに対してそれを行うには時間がかかります。出力側では高速です(正確な理由はわかりません)
すべてのキャストを行わない、ある種のバイナリ ストリームを提供する方法はありますか? read()、write() を使用してバイナリの任意のストリームに書き込むことができることは承知していますが、CGAL SNC_io_parser.h を (簡単に) 変更することはできません。理想的には、ストリーミングを要求されたときに (いずれかの方法で) バイナリで実行されるストリームを提供できるようにしたいと考えています。
感謝して受け取った助け。
マルコス