2019-03-27-01-steamのGuile拡張をちゃんとやりたい
>> Site top >> weblog >> 月別アーカイブ >> 2019年03月のlog >> 2019-03-27-01-steamのGuile拡張をちゃんとやりたい
最終更新日付:2019/03/27 01:00:00
steamのGuile拡張をちゃんとやりたい
2019 年 03 月 27 日
これはずっと思っていることだ。今の steam は guile 拡張を利用可能にはなっているが、内部では結局 steam のコマンドを呼び出しているだけ。だから steam コマンドよりも速いワケではないし、本質的に限界もある。これをなんとかしたいという話。
考えている手口としては、Guile の Smobs という機能を利用すること。scheme オブジェクトを自作するってやつだ。手始めに、steam のレコードを表現するオブジェクトを作成して、反復子のように利用することを考えている。あくまでまだイメージだけど、begin / end でもって取得して、インクリメントしながら順番に処理をする。現在のレコードの各種フィールドを取得する関数ももちろん用意する。
この方法は、data ID を使った方法よりももちろん速いのだけれど、欠点もある。レコードが追加・削除された場合、無効になってしまうのだ。事実上反復子のラッパーだから、実装に使用している std::vector の特性がそのまま出る格好になる。これに対するガードを何か考えなければならない。
これまたざっくりなイメージだけれど、各種レコードのコンテナに、「反復子が無効化されるような操作」をする度に値が変化するキー値を持たせることを考えている。そして、反復子ラッパーである smob を作成する時には、その時点でのキー値を smob に持たせる。その反復子を移動、あるいは参照外しする際にはキー値の一致を検証する。不一致ならば、反復子が作成された後にコンテナに変更があった証拠とみなしてエラーにする‥‥‥。
問題は、smob が保有できるデータ量が少ないということだ。void* を格納できるワード1つと、追加で 16bits だけ。まぁそれでも大丈夫だとは思うけど。
問題がもうひとつあった。イマイチやる気がわかないってことだ。頑張れ自分。
コメント
このページのタグ
Page tag : fist
Copyright(C) 2005-2021 project-enigma.
Generated by CL-PREFAB.