C言語でSTL的なことができるCSTLがすごい&例えばDLLを小さくする

CSTL:http://cstl.sourceforge.jp/
これはすごい。
C言語で、ヘッダだけで、STLに近いことが、STLに近い形で使える、ライブラリ。
vectorやmapが普通に使える。
C言語なのになんでヘッダだけで使えるかというと、全部マクロで書かれているから。
機能を使いたい.cファイルでマクロを展開することで関数の実体を作るから、ヘッダをインクルードして一行マクロを書くだけでmapが使える。例えば下のような使い方。


#indlude <stdio.h>
#include "cstl/map.h"

// std::map<int, int>っていう型(=IntIntMap)を定義する。IntIntMapは任意の文字列でいい。
CSTL_MAP_INTERFACE(IntIntMap, int, int)
CSTL_MAP_IMPLEMENT(IntIntMap, int, int, CSTL_LESS)

// std::map<const *char, int>っていう型(=StrStrMap)を定義する。StrStrMapは任意の文字列でいい。
CSTL_MAP_INTERFACE(StrStrMap, const char*, char *)
CSTL_MAP_IMPLEMENT(StrStrMap, const char*, char *, strcmp)

int main(int argc, char *argv[]) {
   IntIntMap *iimap;
   StrStrMap*ssmap;
   char *fuga = "fuga";
   
   iimap = IntIntMap_new();   // 作成
   IntIntMap_insert(iimap, 1, 2);   // 挿入
   if (IntIntMap_find(iimap, 1) != IntIntMap_end(iimap)) {   // 検索
      printf("%d\n", *IntIntMap_lookup(iimap, 1));  // 参照
   }
   IntIntMap_delete(iimap);   // 解放

   ssmap = StrStrMap_new();   // 作成
   StrStrMap_insert(ssmap, "hoge", fuga);   // 挿入
   if (StrStrMap_find(ssmap, "hoge") != StrStrMap_end(ssmap)) {   // 検索
      printf("%s\n", *StrStrMap_lookup(ssmap, "hoge"));   // 参照
   }
   StrStrMap_delete(ssmap);   // 解放

   return 0;
}

begin()とかnext()とかも使えるし、multimapもある。
mapだけでなくstringまであるし、algorithmも一部用意されている。
これはすごい。ライセンスも修正BSDライセンスで使いやすい。

というわけで、例えば私の場合はdllのファイルサイズを小さくするためにこれを使ってみた。
という話は次のエントリにつづく。

以上

コスミー について

昔(?)はゲーム作ってました。 今もなんか作ろうとしています。
カテゴリー: C言語 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。