Newer
Older
libkc / modules / include / kc_map.h
  1. /**
  2. * @file kc_map.h
  3. * @brief MAp モジュールヘッダファイル
  4. * @copyright 2002 - 2023 Nomura Kei
  5. * @depends
  6. * kc.h
  7. */
  8. #ifndef KC_LIST_H
  9. #define KC_LIST_H
  10.  
  11. #include <kc.h>
  12.  
  13. #ifdef __cplusplus
  14. extern "C"
  15. {
  16. namespace kc
  17. {
  18. using namespace std;
  19. #endif
  20.  
  21. /**
  22. * マップ。
  23. */
  24. typedef struct KcMap_
  25. {
  26. /**
  27. * マップに格納されている要素の数を返します。
  28. *
  29. * @param map 対象マップ
  30. * @return 要素の数
  31. */
  32. size_t (*size)(struct KcMap_ *map);
  33.  
  34. /**
  35. * マップに要素を追加します。
  36. * オブジェクトはコピーして追加されます。
  37. * 追加に失敗した場合、NULL が返されます。
  38. *
  39. * @param map 対象マップ
  40. * @param key キー
  41. * @param obj キーに対応するオブジェクト
  42. * @param size オブジェクトのサイズ
  43. * @return 追加したオブジェクトへのポインタ
  44. */
  45. void *(*put)(struct KcMap_ *map, const char *key, const void *obj, size_t size);
  46.  
  47. /**
  48. * 指定されたキーに対応するオブジェクトを取得します。
  49. * オブジェクトは参照が渡されます。
  50. * size が NULL でない場合、取得されたオブジェクトのサイズが格納されます。
  51. *
  52. * @param map 対象マップ
  53. * @param key キー
  54. * @param size オブジェクトのサイズ
  55. * @return オブジェクトへのポインタ
  56. */
  57. void *(*get)(struct KcMap_ *map, const char *key, size_t *size);
  58.  
  59. /**
  60. * 指定されたキーに対応するオブジェクトを削除します。
  61. *
  62. * @param map 対象マップ
  63. * @param key キー
  64. */
  65. void (*remove)(struct KcMap_ *map, const char *key);
  66.  
  67. /**
  68. * マップ内のすべての要素を対象リストから削除します。
  69. *
  70. * @param list 対象リスト
  71. */
  72. void (*clear)(struct KcMap_ *map);
  73.  
  74. /**
  75. * マップに格納されている要素を引数に、指定されたハンドラを実行します。
  76. * ハンドラ関数が false を返す場合、呼出し処置は中断されます。
  77. *
  78. * @param map 対象マップ
  79. * @param handler ハンドラ関数
  80. * @param args ハンドラ関数に渡されるユーザーデータ
  81. */
  82. void (*entries)(struct KcMap_ *map, bool (*handler)(const char *key, const void *val, size_t size, void *args), void *args);
  83.  
  84. /**
  85. * マップ管理情報
  86. * 本オブジェクトはリスト実装者が利用するための情報へのポインタとなります。
  87. */
  88. void *_info;
  89.  
  90. } KcMap;
  91.  
  92. /**
  93. * マップ を構築します。
  94. *
  95. * @return cap マップのキー管理容量
  96. */
  97. KcMap *KcMap_new(size_t cap);
  98.  
  99. /**
  100. * マップを破棄します。
  101. * @param map 破棄するマップ
  102. */
  103. void KcMap_delete(KcMap *map);
  104.  
  105. /**
  106. * 指定されたキーに対応するハッシュコードを返します。
  107. */
  108. int KcMap_hash_code(const char *key);
  109.  
  110. #ifdef __cplusplus
  111. } // namespace kc
  112. } // extern "C"
  113. #endif
  114. #endif // KC_LIST_H