Lux IOのPerlバインディングを作成した
[id:mogwaing](http://blog.hatena.ne.jp/mogwaing/)さんが開発されているYet AnotherなDBMであるところの[Lux IO](http://luxio.sourceforge.net/)を使ってみたくなったので、Perlから使えるようバインディングを書いてみました。…
id:mogwaingさんが開発されているYet AnotherなDBMであるところのLux IOを使ってみたくなったので、Perlから使えるようバインディングを書いてみました。初XSな上にC/C++もろくに書いたことがないのでわかんないところだらけですが、なんか一応動くようになったっぽいので、GitHubに上げておきました。
ご覧になればわかる通り、なんかせっかくC++ライブラリを触るのに、関数をベタベタ書いてラップしてるだけで、なんともダサい感じ。typemapをうまく使えばいい感じになるということだったのだけど、Lux::IO::Btreeみたいなコロンつきの型や、Lux::IO::*以下にあるstructやenumをどうtypemapすればいいのかわからなかったので、こんな感じに。
以下、あれこれ試行錯誤する中で疑問だったり、やり残したりしたこと。
- コロンつきの型を普通にtypemapしようとするとエラーになる?
- たとえばtypedef Lux::IO::Btree Lux_IO_Btree;とかいちいちtypedefしてまわればできないことはないけど、ダサい感じ。
- typedefするんじゃなくてusing namespace Lux::IO;とかすればいけるかも……?
- フラグの扱いがまだちゃんとできてない。Perl側でどう定義してやるのがいいんかなー。
次は、typemapしてスマートな感じにしたいところです。
あと、以下に一応使い方を示しておきます。つっても、特に何もないけど。
use Lux::IO;
use Lux::IO::Btree;
my $bt = Lux::IO::Btree->new;
$bt->open('test', Lux::IO::DB_CREAT);
$bt->put('key', 'value'); #=> true
$bt->get('key'); #=> 'value'
$bt->del('key'); #=> true
$bt->get('key'); #-> false
$bt->close;
追記(2008-12-27)
Lux IOのPerlバインディングLux::IOをリリースしました。