「新しいTokyo Tyrantで遊んでみてなんとなく動いた記録」で書いたようなことをやっていて、ストレージにLux IOを使わせてもらったものの、決め打ちなのが微妙だなあと思ったので、C++の練習にちょうどいいかなってんで、各種DBMを抽象化したライブラリ的なものを書いてみようと思いました。Omnivoreという名前をとりあえずつけました。「雑食性の」とかいう意味です。C++の練習もそうですが、C/C++のプロジェクトとしてひと通りの形をなすよう、autotoolsとかの使い方も練習したいところです。
インタフェイス的には、こんな感じで使えるようになればなーと思います。
std::string key("foo"); std::string value("bar"); Omnivore::Storage *db = new Omnivore::Storage("LuxIO"); db->open("test"); db->put(key, key.length(), value, value.length()); Omnivore::Storage::data_t *result = db->get(key, key.length()); std::cout << "key: " << key << std::endl; std::cout << "val: " << result->data << std::endl; db->close(); db->free();
とはいえ、test/luxio.cppをビルドしてみたところ、下記のようなエラーが出てよくわかんなくてまだ全然動きませんが。
$ g++ -lluxio -o luxio.o test/luxio.cpp Undefined symbols: "vtable for Omnivore::Storage::LuxIO", referenced from: __ZTVN8Omnivore7Storage5LuxIOE$non_lazy_ptr in ccR4JKKH.o ld: symbol(s) not found collect2: ld returned 1 exit status
追記 2009-05-15
↓じゃないとだめでした。あほか……。
$ g++ -lluxio -o omnivore-storage test/luxio.cpp src/luxio.cpp