夜空日和 [出張版]

星を見上げながら、今日を語ってみようか

 

スポンサーサイト


Category: スポンサー広告   Tags: ---
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SWIG で PPL を Ruby に部分移植してみた part.2


Category: 技術   Tags: ---
2. operator を組み込む

C++には、演算子の挙動を変更する方法 (operator) が存在します。
似たように、Rubyにも (レシーバとなるクラスの) 演算子の挙動を変更する手法があります。

SWIGでは、operatorが定義されていた場合、自動でRubyの演算子に変換してくれます。



2.1. operatorの難点

・・・と書きましたが、実は少し違います。
本当のところは「クラスにoperatorが定義されていた場合」のみです。

PPLの場合、operatorのほとんどはfriendなグローバル関数として定義されていました。
SWIGでは、この場合、自動でマッピングが行われません。
そのため、自分でoperatorを用意する必要があります。



2.2. operatorの用意

用意と言っても簡単で、SWIG用の変換ヘッダーに追記するだけです。
注意が必要なのは、operatorは「本物のPPLでは定義されていない」ということです。
つまり、コンパイル時には、このオレオレoperatorが含まれては行けません。
(詳細は、1.3 インターフェイスファイルを作成する を参照)

今回の場合は、次のように定義しました。
/* ppl.partial.define.hpp */
/* Variable に演算子を追加定義 */
class Variable {
public:
  Linear_Expression
    operator+ (Variable w)
    { return *this + w; }

  Linear_Expression
    operator- (Variable w)
    { return *this - w; }
};

また、PPL用インターフェイスファイルに次のように書くことでも、対応できます。
/* ppl.i */
%extend Variable {
  Linear_Expression
    operator+ (Variable w)
    { return *$self + w; }

  Linear_Expression
    operator- (Variable w)
    { return *$self - w; }
};

これで、Rubyで次のような演算が可能になります。
require_relative 'PPL'

x = PPL::Variable.new(1)
y = PPL::Variable.new(1)

p x + y # => Linear_Expression



2.3. その他のメソッドも欲しい

これが出来るなら、Ruby標準の to_s とかも定義したいですよね。
出来ます。そのままです。
/* ppl.i */

%include "std_string.i"

%extend Variable {
  std::string
    to_s()
    { return to_string(*$self) }
};

関数の追加定義もします。
/* ppl.extend.define.hpp */

std::string
to_string(const Variable &v) {
  std::ostringstream os;
  os << v;
  return os.str();
}

注意が2点あります。

今回は追加ファイルとして ppl.extend.define.hpp を用意しました。
このファイルは、コンパイル時にも必要になります。 (独自関数 to_string を定義したため)
これは、PPL用インターフェイスに書いても同じことが出来ると思います。
( そっちの方が簡単だと思います。何故こっちを選んだんだ・・・? )

また、to_s メソッドはstd::string型を返します。
これをRubyのStringにマッピングするために、 SWIG標準のインターフェイス std_string.i を呼んでいます。
これが無いと、マッピングできません。

std::stringのように、STLにあるコンテナの多くはSWIG用インターフェイスファイルが用意されています。
詳しくは、SWIGのページを参照してください。


次回(たぶん最後)は、STLのtemplateについて書きます。

スポンサーサイト


Comments

Leave a Comment



08 2017
SUN MON TUE WED THU FRI SAT
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

07

09


 
プロフィール

ひでたそ

Author:ひでたそ
Comment:
現役大学生で天文好き。
今日もどこかで、上を見ながら歩いています。

 
 
 
最新トラックバック
 
 
検索フォーム
 
 
 
ブロとも申請フォーム
 
QRコード
QRコード
 

Archive   RSS   Login

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。