Hirofumi Fujii Start Page

gnuplot の iostream 化

C++ 入門の題材 search その何番目かわからなくなったが、、

徒然なるままに、 ひぐらし画面に向かいて、、

というわけで(どういうわけだ?)、一つの案として

  • 入門 program として乱数発生(rand() を使う)。これは生データの 代わり。将来シミュレーションにも使える。
  • 乱数発生を関数化、関数と namespace の導入
  • 乱数分布を調べるのに(1次元) histogram を struct で導入、 メモリの動的確保と pointer の導入
  • histogram の class 化、copy constructor 、代入演算子の重要性
  • histogram class の出力演算子の作成。この時、gnuplot の ostream class 化が 成されていると、とても美しいような気がする、、

で、gnuplot の iostream 化(というかとりあえず ostream 化)

  • gnuplot の起動と制御は popen() で行う。
  • popen() に該当する pstream class の標準があれば、それを使おうかと思った のだが、どうも無さそう(boost にはあるかも、でも boost を導入するほどのもの ではないだろう)。
  • gnuplot に特化するなら、streambuf と ostream から派生させる方が楽そう。 constructor でいきなり popen してもよいだろうし。
    • streambuf から gplbuf を派生。
    • gplbuf には open()/close() を持たせ、ここで popen()/pclose()。
    • ogplstream(ognuplot という名前の方がいいかな?)は gplbuf 使って、 通常の ostream の作成法で作る。

何となく簡単にいけそうな気がしてきた。後でやってみよう。

結果

何となくできた。しかし、デバッグも含め 3時間もかかってしまった。疲れたので source 載せるのやめ(急ぎの希望者は藤井宛電子メールで、、Hirofumi.Fujii に @kek.jp をつける。でも居るのか?)。

まあ、結構おもしろいかも。

mylibrary::ognuplot gpl("gnuplot");
  :
gpl << "plot sin(x)" << std::endl;

なんてやると絵が出る。

  • class名は ognuplot にした。
  • std::ostream から派生。従って、出力規則も std::ostream のルールだし 例外制御も std::ostream のルール。
  • 上記例のように実行ファイル名を与えて construct すると、その時点で popen() 接続。
  • 引数無しの constructor で生成した時は、後で open() 関数を呼び出すことで popen() 接続。
  • close() は用意してあるが、特に呼び出さなくても destruct された時点で open されていれば自動で close()。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-01-13 (水) 16:20:03