File Coverage

Shared.xs
Criterion Covered Total %
statement 556 559 99.4
branch n/a
condition n/a
subroutine n/a
pod n/a
total 556 559 99.4


line stmt bran cond sub pod time code
1             #define PERL_NO_GET_CONTEXT
2             #include "EXTERN.h"
3             #include "perl.h"
4             #include "XSUB.h"
5              
6             #include "ppport.h"
7              
8             #include "shm_i16.h"
9             #include "shm_i32.h"
10             #include "shm_ii.h"
11             #include "shm_i16s.h"
12             #include "shm_i32s.h"
13             #include "shm_is.h"
14             #include "shm_si16.h"
15             #include "shm_si32.h"
16             #include "shm_si.h"
17             #include "shm_ss.h"
18              
19             #include "XSParseKeyword.h"
20              
21             /* ---- Exception-safe lock guard for rdlock held across Perl API calls ---- */
22              
23 18           static void shm_rdunlock_cleanup(pTHX_ void *ptr) {
24 18           shm_rwlock_rdunlock((ShmHandle *)ptr);
25 18           }
26              
27             #define RDLOCK_GUARD(handle) \
28             shm_rwlock_rdlock(handle); \
29             SAVEDESTRUCTOR_X(shm_rdunlock_cleanup, (void*)(handle))
30              
31             /* ---- Exception-safe guard for a wrlock + seqlock write section ----
32             * Mirrors RDLOCK_GUARD for batch write ops (set_multi/remove_multi) that
33             * call SvIV/SvPV on caller SVs while the lock is held: a die() from a tied
34             * or overloaded argument must not abandon the write lock with the seqlock
35             * left odd (which would self-deadlock this process and stall others until
36             * stale-lock recovery). The cleanup runs on XSUB scope exit, whether normal
37             * or via croak unwind. */
38 3           static void shm_wrseq_unlock_cleanup(pTHX_ void *ptr) {
39 3           ShmHandle *h = (ShmHandle *)ptr;
40 3           shm_seqlock_write_end(&h->hdr->seq);
41 3           shm_rwlock_wrunlock(h);
42 3           }
43              
44             #define WRSEQ_GUARD(handle) \
45             shm_rwlock_wrlock(handle); \
46             shm_seqlock_write_begin(&(handle)->hdr->seq); \
47             SAVEDESTRUCTOR_X(shm_wrseq_unlock_cleanup, (void*)(handle))
48              
49             /* Exception-safe free() for malloc'd scratch buffers (e.g. drain's value
50             * buffer) held across newSVpvn() in a result-build loop: an OOM croak there
51             * must not leak the buffer. free() (not Safefree) — the buffer comes from the
52             * C realloc() in shm_grow_buf, a different pool than the Perl allocator. */
53 0           static void shm_free_cleanup(pTHX_ void *ptr) {
54 0           free(ptr);
55 0           }
56              
57             /* ---- Helper macros ---- */
58              
59             #define EXTRACT_MAP(classname, sv) \
60             if (!sv_isobject(sv) || !sv_derived_from(sv, classname)) \
61             croak("Expected a %s object", classname); \
62             ShmHandle* h = INT2PTR(ShmHandle*, SvIV(SvRV(sv))); \
63             if (!h) croak("Attempted to use a destroyed %s object", classname)
64              
65             #define EXTRACT_STR_KEY(sv) \
66             STRLEN _klen; \
67             const char* _kstr = SvPV(sv, _klen); \
68             if (_klen > SHM_MAX_STR_LEN) croak("key too long (max 1GB)"); \
69             bool _kutf8 = SvUTF8(sv) ? true : false
70              
71             #define EXTRACT_STR_VAL(sv) \
72             STRLEN _vlen; \
73             const char* _vstr = SvPV(sv, _vlen); \
74             if (_vlen > SHM_MAX_STR_LEN) croak("value too long (max 1GB)"); \
75             bool _vutf8 = SvUTF8(sv) ? true : false
76              
77             #define EXTRACT_STR_EXPECTED(esv) \
78             STRLEN _elen; \
79             const char* _estr = SvPV(esv, _elen); \
80             if (_elen > SHM_MAX_STR_LEN) croak("expected value too long (max 1GB)")
81              
82             #define EXTRACT_STR_EXPECTED_DESIRED(esv, dsv) \
83             EXTRACT_STR_EXPECTED(esv); \
84             STRLEN _dlen; \
85             const char* _dstr = SvPV(dsv, _dlen); \
86             if (_dlen > SHM_MAX_STR_LEN) croak("desired value too long (max 1GB)"); \
87             bool _dutf8 = SvUTF8(dsv) ? true : false
88              
89             #define REQUIRE_TTL(h) \
90             { ShmHandle *_th = (h)->shard_handles ? (h)->shard_handles[0] : (h); \
91             if (!_th->expires_at) croak("operation requires a TTL-enabled map (pass ttl > 0 to constructor)"); }
92              
93             #define EXTRACT_CURSOR(classname, sv) \
94             if (!sv_isobject(sv) || !sv_derived_from(sv, classname)) \
95             croak("Expected a %s object", classname); \
96             ShmCursor* c = INT2PTR(ShmCursor*, SvIV(SvRV(sv))); \
97             if (!c) croak("Attempted to use a destroyed %s cursor", classname)
98              
99             /* ---- Generic keyword build functions ---- */
100              
101 74           static int build_kw_1arg(pTHX_ OP **out, XSParseKeywordPiece *args[], size_t nargs, void *hookdata) {
102             (void)nargs;
103 74           const char *func = (const char *)hookdata;
104 74           OP *map_op = args[0]->op;
105 74           OP *cvref = newCVREF(0, newGVOP(OP_GV, 0, gv_fetchpv(func, GV_ADD, SVt_PVCV)));
106 74           OP *arglist = op_append_elem(OP_LIST, map_op, cvref);
107 74           *out = op_convert_list(OP_ENTERSUB, OPf_STACKED, arglist);
108 74           return KEYWORD_PLUGIN_EXPR;
109             }
110              
111 161           static int build_kw_2arg(pTHX_ OP **out, XSParseKeywordPiece *args[], size_t nargs, void *hookdata) {
112             (void)nargs;
113 161           const char *func = (const char *)hookdata;
114 161           OP *map_op = args[0]->op;
115 161           OP *key_op = args[1]->op;
116 161           OP *cvref = newCVREF(0, newGVOP(OP_GV, 0, gv_fetchpv(func, GV_ADD, SVt_PVCV)));
117 161           OP *arglist = op_append_elem(OP_LIST, map_op, key_op);
118 161           arglist = op_append_elem(OP_LIST, arglist, cvref);
119 161           *out = op_convert_list(OP_ENTERSUB, OPf_STACKED, arglist);
120 161           return KEYWORD_PLUGIN_EXPR;
121             }
122              
123 177           static int build_kw_3arg(pTHX_ OP **out, XSParseKeywordPiece *args[], size_t nargs, void *hookdata) {
124             (void)nargs;
125 177           const char *func = (const char *)hookdata;
126 177           OP *map_op = args[0]->op;
127 177           OP *key_op = args[1]->op;
128 177           OP *val_op = args[2]->op;
129 177           OP *cvref = newCVREF(0, newGVOP(OP_GV, 0, gv_fetchpv(func, GV_ADD, SVt_PVCV)));
130 177           OP *arglist = op_append_elem(OP_LIST, map_op, key_op);
131 177           arglist = op_append_elem(OP_LIST, arglist, val_op);
132 177           arglist = op_append_elem(OP_LIST, arglist, cvref);
133 177           *out = op_convert_list(OP_ENTERSUB, OPf_STACKED, arglist);
134 177           return KEYWORD_PLUGIN_EXPR;
135             }
136              
137 42           static int build_kw_4arg(pTHX_ OP **out, XSParseKeywordPiece *args[], size_t nargs, void *hookdata) {
138             (void)nargs;
139 42           const char *func = (const char *)hookdata;
140 42           OP *map_op = args[0]->op;
141 42           OP *key_op = args[1]->op;
142 42           OP *val_op = args[2]->op;
143 42           OP *ttl_op = args[3]->op;
144 42           OP *cvref = newCVREF(0, newGVOP(OP_GV, 0, gv_fetchpv(func, GV_ADD, SVt_PVCV)));
145 42           OP *arglist = op_append_elem(OP_LIST, map_op, key_op);
146 42           arglist = op_append_elem(OP_LIST, arglist, val_op);
147 42           arglist = op_append_elem(OP_LIST, arglist, ttl_op);
148 42           arglist = op_append_elem(OP_LIST, arglist, cvref);
149 42           *out = op_convert_list(OP_ENTERSUB, OPf_STACKED, arglist);
150 42           return KEYWORD_PLUGIN_EXPR;
151             }
152              
153 34           static int build_kw_1arg_list(pTHX_ OP **out, XSParseKeywordPiece *args[], size_t nargs, void *hookdata) {
154             (void)nargs;
155 34           const char *func = (const char *)hookdata;
156 34           OP *map_op = args[0]->op;
157 34           OP *cvref = newCVREF(0, newGVOP(OP_GV, 0, gv_fetchpv(func, GV_ADD, SVt_PVCV)));
158 34           OP *arglist = op_append_elem(OP_LIST, map_op, cvref);
159 34           *out = op_convert_list(OP_ENTERSUB, OPf_STACKED | OPf_WANT_LIST, arglist);
160 34           return KEYWORD_PLUGIN_EXPR;
161             }
162              
163             /* ---- Keyword pieces ---- */
164              
165             static const struct XSParseKeywordPieceType pieces_1expr[] = {
166             XPK_TERMEXPR, {0}
167             };
168              
169             static const struct XSParseKeywordPieceType pieces_2expr[] = {
170             XPK_TERMEXPR, XPK_COMMA, XPK_TERMEXPR, {0}
171             };
172              
173             static const struct XSParseKeywordPieceType pieces_3expr[] = {
174             XPK_TERMEXPR, XPK_COMMA, XPK_TERMEXPR, XPK_COMMA, XPK_TERMEXPR, {0}
175             };
176              
177             static const struct XSParseKeywordPieceType pieces_4expr[] = {
178             XPK_TERMEXPR, XPK_COMMA, XPK_TERMEXPR, XPK_COMMA, XPK_TERMEXPR, XPK_COMMA, XPK_TERMEXPR, {0}
179             };
180              
181             /* ---- Keyword hook definitions ---- */
182              
183             #define DEFINE_KW_HOOK(variant, PKG, kw, nargs, builder) \
184             static const struct XSParseKeywordHooks hooks_shm_##variant##_##kw = { \
185             .flags = XPK_FLAG_EXPR, \
186             .permit_hintkey = "Data::HashMap::Shared::" PKG "/shm_" #variant "_" #kw, \
187             .pieces = pieces_##nargs##expr, \
188             .build = builder, \
189             };
190              
191             /* I16 (int16 -> int16, counters) */
192             DEFINE_KW_HOOK(i16, "I16", put, 3, build_kw_3arg)
193             DEFINE_KW_HOOK(i16, "I16", get, 2, build_kw_2arg)
194             DEFINE_KW_HOOK(i16, "I16", remove, 2, build_kw_2arg)
195             DEFINE_KW_HOOK(i16, "I16", exists, 2, build_kw_2arg)
196             DEFINE_KW_HOOK(i16, "I16", incr, 2, build_kw_2arg)
197             DEFINE_KW_HOOK(i16, "I16", decr, 2, build_kw_2arg)
198             DEFINE_KW_HOOK(i16, "I16", incr_by, 3, build_kw_3arg)
199             DEFINE_KW_HOOK(i16, "I16", max, 3, build_kw_3arg)
200             DEFINE_KW_HOOK(i16, "I16", min, 3, build_kw_3arg)
201             DEFINE_KW_HOOK(i16, "I16", size, 1, build_kw_1arg)
202             DEFINE_KW_HOOK(i16, "I16", keys, 1, build_kw_1arg_list)
203             DEFINE_KW_HOOK(i16, "I16", values, 1, build_kw_1arg_list)
204             DEFINE_KW_HOOK(i16, "I16", items, 1, build_kw_1arg_list)
205             DEFINE_KW_HOOK(i16, "I16", each, 1, build_kw_1arg_list)
206             DEFINE_KW_HOOK(i16, "I16", iter_reset, 1, build_kw_1arg)
207             DEFINE_KW_HOOK(i16, "I16", clear, 1, build_kw_1arg)
208             DEFINE_KW_HOOK(i16, "I16", to_hash, 1, build_kw_1arg)
209             DEFINE_KW_HOOK(i16, "I16", max_entries, 1, build_kw_1arg)
210             DEFINE_KW_HOOK(i16, "I16", get_or_set, 3, build_kw_3arg)
211             DEFINE_KW_HOOK(i16, "I16", put_ttl, 4, build_kw_4arg)
212             DEFINE_KW_HOOK(i16, "I16", max_size, 1, build_kw_1arg)
213             DEFINE_KW_HOOK(i16, "I16", ttl, 1, build_kw_1arg)
214             DEFINE_KW_HOOK(i16, "I16", cursor, 1, build_kw_1arg)
215             DEFINE_KW_HOOK(i16, "I16", cursor_next, 1, build_kw_1arg_list)
216             DEFINE_KW_HOOK(i16, "I16", cursor_reset, 1, build_kw_1arg)
217             DEFINE_KW_HOOK(i16, "I16", cursor_seek, 2, build_kw_2arg)
218             DEFINE_KW_HOOK(i16, "I16", ttl_remaining, 2, build_kw_2arg)
219             DEFINE_KW_HOOK(i16, "I16", capacity, 1, build_kw_1arg)
220             DEFINE_KW_HOOK(i16, "I16", tombstones, 1, build_kw_1arg)
221             DEFINE_KW_HOOK(i16, "I16", take, 2, build_kw_2arg)
222             DEFINE_KW_HOOK(i16, "I16", pop, 1, build_kw_1arg)
223             DEFINE_KW_HOOK(i16, "I16", shift, 1, build_kw_1arg)
224             DEFINE_KW_HOOK(i16, "I16", drain, 2, build_kw_2arg)
225             DEFINE_KW_HOOK(i16, "I16", flush_expired, 1, build_kw_1arg)
226             DEFINE_KW_HOOK(i16, "I16", flush_expired_partial, 2, build_kw_2arg)
227             DEFINE_KW_HOOK(i16, "I16", mmap_size, 1, build_kw_1arg)
228             DEFINE_KW_HOOK(i16, "I16", touch, 2, build_kw_2arg)
229             DEFINE_KW_HOOK(i16, "I16", reserve, 2, build_kw_2arg)
230             DEFINE_KW_HOOK(i16, "I16", stat_evictions, 1, build_kw_1arg)
231             DEFINE_KW_HOOK(i16, "I16", stat_expired, 1, build_kw_1arg)
232             DEFINE_KW_HOOK(i16, "I16", stat_recoveries, 1, build_kw_1arg)
233             DEFINE_KW_HOOK(i16, "I16", arena_used, 1, build_kw_1arg)
234             DEFINE_KW_HOOK(i16, "I16", arena_cap, 1, build_kw_1arg)
235             DEFINE_KW_HOOK(i16, "I16", add, 3, build_kw_3arg)
236             DEFINE_KW_HOOK(i16, "I16", add_ttl, 4, build_kw_4arg)
237             DEFINE_KW_HOOK(i16, "I16", update_ttl, 4, build_kw_4arg)
238             DEFINE_KW_HOOK(i16, "I16", update, 3, build_kw_3arg)
239             DEFINE_KW_HOOK(i16, "I16", swap, 3, build_kw_3arg)
240             DEFINE_KW_HOOK(i16, "I16", cas, 4, build_kw_4arg)
241             DEFINE_KW_HOOK(i16, "I16", cas_take, 3, build_kw_3arg)
242             DEFINE_KW_HOOK(i16, "I16", persist, 2, build_kw_2arg)
243             DEFINE_KW_HOOK(i16, "I16", set_ttl, 3, build_kw_3arg)
244              
245             /* I32 (int32 -> int32, counters) */
246             DEFINE_KW_HOOK(i32, "I32", put, 3, build_kw_3arg)
247             DEFINE_KW_HOOK(i32, "I32", get, 2, build_kw_2arg)
248             DEFINE_KW_HOOK(i32, "I32", remove, 2, build_kw_2arg)
249             DEFINE_KW_HOOK(i32, "I32", exists, 2, build_kw_2arg)
250             DEFINE_KW_HOOK(i32, "I32", incr, 2, build_kw_2arg)
251             DEFINE_KW_HOOK(i32, "I32", decr, 2, build_kw_2arg)
252             DEFINE_KW_HOOK(i32, "I32", incr_by, 3, build_kw_3arg)
253             DEFINE_KW_HOOK(i32, "I32", max, 3, build_kw_3arg)
254             DEFINE_KW_HOOK(i32, "I32", min, 3, build_kw_3arg)
255             DEFINE_KW_HOOK(i32, "I32", size, 1, build_kw_1arg)
256             DEFINE_KW_HOOK(i32, "I32", keys, 1, build_kw_1arg_list)
257             DEFINE_KW_HOOK(i32, "I32", values, 1, build_kw_1arg_list)
258             DEFINE_KW_HOOK(i32, "I32", items, 1, build_kw_1arg_list)
259             DEFINE_KW_HOOK(i32, "I32", each, 1, build_kw_1arg_list)
260             DEFINE_KW_HOOK(i32, "I32", iter_reset, 1, build_kw_1arg)
261             DEFINE_KW_HOOK(i32, "I32", clear, 1, build_kw_1arg)
262             DEFINE_KW_HOOK(i32, "I32", to_hash, 1, build_kw_1arg)
263             DEFINE_KW_HOOK(i32, "I32", max_entries, 1, build_kw_1arg)
264             DEFINE_KW_HOOK(i32, "I32", get_or_set, 3, build_kw_3arg)
265             DEFINE_KW_HOOK(i32, "I32", put_ttl, 4, build_kw_4arg)
266             DEFINE_KW_HOOK(i32, "I32", max_size, 1, build_kw_1arg)
267             DEFINE_KW_HOOK(i32, "I32", ttl, 1, build_kw_1arg)
268             DEFINE_KW_HOOK(i32, "I32", cursor, 1, build_kw_1arg)
269             DEFINE_KW_HOOK(i32, "I32", cursor_next, 1, build_kw_1arg_list)
270             DEFINE_KW_HOOK(i32, "I32", cursor_reset, 1, build_kw_1arg)
271             DEFINE_KW_HOOK(i32, "I32", cursor_seek, 2, build_kw_2arg)
272             DEFINE_KW_HOOK(i32, "I32", ttl_remaining, 2, build_kw_2arg)
273             DEFINE_KW_HOOK(i32, "I32", capacity, 1, build_kw_1arg)
274             DEFINE_KW_HOOK(i32, "I32", tombstones, 1, build_kw_1arg)
275             DEFINE_KW_HOOK(i32, "I32", take, 2, build_kw_2arg)
276             DEFINE_KW_HOOK(i32, "I32", pop, 1, build_kw_1arg)
277             DEFINE_KW_HOOK(i32, "I32", shift, 1, build_kw_1arg)
278             DEFINE_KW_HOOK(i32, "I32", drain, 2, build_kw_2arg)
279             DEFINE_KW_HOOK(i32, "I32", flush_expired, 1, build_kw_1arg)
280             DEFINE_KW_HOOK(i32, "I32", flush_expired_partial, 2, build_kw_2arg)
281             DEFINE_KW_HOOK(i32, "I32", mmap_size, 1, build_kw_1arg)
282             DEFINE_KW_HOOK(i32, "I32", touch, 2, build_kw_2arg)
283             DEFINE_KW_HOOK(i32, "I32", reserve, 2, build_kw_2arg)
284             DEFINE_KW_HOOK(i32, "I32", stat_evictions, 1, build_kw_1arg)
285             DEFINE_KW_HOOK(i32, "I32", stat_expired, 1, build_kw_1arg)
286             DEFINE_KW_HOOK(i32, "I32", stat_recoveries, 1, build_kw_1arg)
287             DEFINE_KW_HOOK(i32, "I32", arena_used, 1, build_kw_1arg)
288             DEFINE_KW_HOOK(i32, "I32", arena_cap, 1, build_kw_1arg)
289             DEFINE_KW_HOOK(i32, "I32", add, 3, build_kw_3arg)
290             DEFINE_KW_HOOK(i32, "I32", add_ttl, 4, build_kw_4arg)
291             DEFINE_KW_HOOK(i32, "I32", update_ttl, 4, build_kw_4arg)
292             DEFINE_KW_HOOK(i32, "I32", update, 3, build_kw_3arg)
293             DEFINE_KW_HOOK(i32, "I32", swap, 3, build_kw_3arg)
294             DEFINE_KW_HOOK(i32, "I32", cas, 4, build_kw_4arg)
295             DEFINE_KW_HOOK(i32, "I32", cas_take, 3, build_kw_3arg)
296             DEFINE_KW_HOOK(i32, "I32", persist, 2, build_kw_2arg)
297             DEFINE_KW_HOOK(i32, "I32", set_ttl, 3, build_kw_3arg)
298              
299             /* II (int64 -> int64, counters) */
300             DEFINE_KW_HOOK(ii, "II", put, 3, build_kw_3arg)
301             DEFINE_KW_HOOK(ii, "II", get, 2, build_kw_2arg)
302             DEFINE_KW_HOOK(ii, "II", remove, 2, build_kw_2arg)
303             DEFINE_KW_HOOK(ii, "II", exists, 2, build_kw_2arg)
304             DEFINE_KW_HOOK(ii, "II", incr, 2, build_kw_2arg)
305             DEFINE_KW_HOOK(ii, "II", decr, 2, build_kw_2arg)
306             DEFINE_KW_HOOK(ii, "II", incr_by, 3, build_kw_3arg)
307             DEFINE_KW_HOOK(ii, "II", max, 3, build_kw_3arg)
308             DEFINE_KW_HOOK(ii, "II", min, 3, build_kw_3arg)
309             DEFINE_KW_HOOK(ii, "II", size, 1, build_kw_1arg)
310             DEFINE_KW_HOOK(ii, "II", keys, 1, build_kw_1arg_list)
311             DEFINE_KW_HOOK(ii, "II", values, 1, build_kw_1arg_list)
312             DEFINE_KW_HOOK(ii, "II", items, 1, build_kw_1arg_list)
313             DEFINE_KW_HOOK(ii, "II", each, 1, build_kw_1arg_list)
314             DEFINE_KW_HOOK(ii, "II", iter_reset, 1, build_kw_1arg)
315             DEFINE_KW_HOOK(ii, "II", clear, 1, build_kw_1arg)
316             DEFINE_KW_HOOK(ii, "II", to_hash, 1, build_kw_1arg)
317             DEFINE_KW_HOOK(ii, "II", max_entries, 1, build_kw_1arg)
318             DEFINE_KW_HOOK(ii, "II", get_or_set, 3, build_kw_3arg)
319             DEFINE_KW_HOOK(ii, "II", put_ttl, 4, build_kw_4arg)
320             DEFINE_KW_HOOK(ii, "II", max_size, 1, build_kw_1arg)
321             DEFINE_KW_HOOK(ii, "II", ttl, 1, build_kw_1arg)
322             DEFINE_KW_HOOK(ii, "II", cursor, 1, build_kw_1arg)
323             DEFINE_KW_HOOK(ii, "II", cursor_next, 1, build_kw_1arg_list)
324             DEFINE_KW_HOOK(ii, "II", cursor_reset, 1, build_kw_1arg)
325             DEFINE_KW_HOOK(ii, "II", cursor_seek, 2, build_kw_2arg)
326             DEFINE_KW_HOOK(ii, "II", ttl_remaining, 2, build_kw_2arg)
327             DEFINE_KW_HOOK(ii, "II", capacity, 1, build_kw_1arg)
328             DEFINE_KW_HOOK(ii, "II", tombstones, 1, build_kw_1arg)
329             DEFINE_KW_HOOK(ii, "II", take, 2, build_kw_2arg)
330             DEFINE_KW_HOOK(ii, "II", pop, 1, build_kw_1arg)
331             DEFINE_KW_HOOK(ii, "II", shift, 1, build_kw_1arg)
332             DEFINE_KW_HOOK(ii, "II", drain, 2, build_kw_2arg)
333             DEFINE_KW_HOOK(ii, "II", flush_expired, 1, build_kw_1arg)
334             DEFINE_KW_HOOK(ii, "II", flush_expired_partial, 2, build_kw_2arg)
335             DEFINE_KW_HOOK(ii, "II", mmap_size, 1, build_kw_1arg)
336             DEFINE_KW_HOOK(ii, "II", touch, 2, build_kw_2arg)
337             DEFINE_KW_HOOK(ii, "II", reserve, 2, build_kw_2arg)
338             DEFINE_KW_HOOK(ii, "II", stat_evictions, 1, build_kw_1arg)
339             DEFINE_KW_HOOK(ii, "II", stat_expired, 1, build_kw_1arg)
340             DEFINE_KW_HOOK(ii, "II", stat_recoveries, 1, build_kw_1arg)
341             DEFINE_KW_HOOK(ii, "II", arena_used, 1, build_kw_1arg)
342             DEFINE_KW_HOOK(ii, "II", arena_cap, 1, build_kw_1arg)
343             DEFINE_KW_HOOK(ii, "II", add, 3, build_kw_3arg)
344             DEFINE_KW_HOOK(ii, "II", add_ttl, 4, build_kw_4arg)
345             DEFINE_KW_HOOK(ii, "II", update_ttl, 4, build_kw_4arg)
346             DEFINE_KW_HOOK(ii, "II", update, 3, build_kw_3arg)
347             DEFINE_KW_HOOK(ii, "II", swap, 3, build_kw_3arg)
348             DEFINE_KW_HOOK(ii, "II", cas, 4, build_kw_4arg)
349             DEFINE_KW_HOOK(ii, "II", cas_take, 3, build_kw_3arg)
350             DEFINE_KW_HOOK(ii, "II", persist, 2, build_kw_2arg)
351             DEFINE_KW_HOOK(ii, "II", set_ttl, 3, build_kw_3arg)
352              
353             /* I16S (int16 -> string, no counters) */
354             DEFINE_KW_HOOK(i16s, "I16S", put, 3, build_kw_3arg)
355             DEFINE_KW_HOOK(i16s, "I16S", get, 2, build_kw_2arg)
356             DEFINE_KW_HOOK(i16s, "I16S", remove, 2, build_kw_2arg)
357             DEFINE_KW_HOOK(i16s, "I16S", exists, 2, build_kw_2arg)
358             DEFINE_KW_HOOK(i16s, "I16S", size, 1, build_kw_1arg)
359             DEFINE_KW_HOOK(i16s, "I16S", keys, 1, build_kw_1arg_list)
360             DEFINE_KW_HOOK(i16s, "I16S", values, 1, build_kw_1arg_list)
361             DEFINE_KW_HOOK(i16s, "I16S", items, 1, build_kw_1arg_list)
362             DEFINE_KW_HOOK(i16s, "I16S", each, 1, build_kw_1arg_list)
363             DEFINE_KW_HOOK(i16s, "I16S", iter_reset, 1, build_kw_1arg)
364             DEFINE_KW_HOOK(i16s, "I16S", clear, 1, build_kw_1arg)
365             DEFINE_KW_HOOK(i16s, "I16S", to_hash, 1, build_kw_1arg)
366             DEFINE_KW_HOOK(i16s, "I16S", max_entries, 1, build_kw_1arg)
367             DEFINE_KW_HOOK(i16s, "I16S", get_or_set, 3, build_kw_3arg)
368             DEFINE_KW_HOOK(i16s, "I16S", put_ttl, 4, build_kw_4arg)
369             DEFINE_KW_HOOK(i16s, "I16S", max_size, 1, build_kw_1arg)
370             DEFINE_KW_HOOK(i16s, "I16S", ttl, 1, build_kw_1arg)
371             DEFINE_KW_HOOK(i16s, "I16S", cursor, 1, build_kw_1arg)
372             DEFINE_KW_HOOK(i16s, "I16S", cursor_next, 1, build_kw_1arg_list)
373             DEFINE_KW_HOOK(i16s, "I16S", cursor_reset, 1, build_kw_1arg)
374             DEFINE_KW_HOOK(i16s, "I16S", cursor_seek, 2, build_kw_2arg)
375             DEFINE_KW_HOOK(i16s, "I16S", ttl_remaining, 2, build_kw_2arg)
376             DEFINE_KW_HOOK(i16s, "I16S", capacity, 1, build_kw_1arg)
377             DEFINE_KW_HOOK(i16s, "I16S", tombstones, 1, build_kw_1arg)
378             DEFINE_KW_HOOK(i16s, "I16S", take, 2, build_kw_2arg)
379             DEFINE_KW_HOOK(i16s, "I16S", pop, 1, build_kw_1arg)
380             DEFINE_KW_HOOK(i16s, "I16S", shift, 1, build_kw_1arg)
381             DEFINE_KW_HOOK(i16s, "I16S", drain, 2, build_kw_2arg)
382             DEFINE_KW_HOOK(i16s, "I16S", flush_expired, 1, build_kw_1arg)
383             DEFINE_KW_HOOK(i16s, "I16S", flush_expired_partial, 2, build_kw_2arg)
384             DEFINE_KW_HOOK(i16s, "I16S", mmap_size, 1, build_kw_1arg)
385             DEFINE_KW_HOOK(i16s, "I16S", touch, 2, build_kw_2arg)
386             DEFINE_KW_HOOK(i16s, "I16S", reserve, 2, build_kw_2arg)
387             DEFINE_KW_HOOK(i16s, "I16S", stat_evictions, 1, build_kw_1arg)
388             DEFINE_KW_HOOK(i16s, "I16S", stat_expired, 1, build_kw_1arg)
389             DEFINE_KW_HOOK(i16s, "I16S", stat_recoveries, 1, build_kw_1arg)
390             DEFINE_KW_HOOK(i16s, "I16S", arena_used, 1, build_kw_1arg)
391             DEFINE_KW_HOOK(i16s, "I16S", arena_cap, 1, build_kw_1arg)
392             DEFINE_KW_HOOK(i16s, "I16S", add, 3, build_kw_3arg)
393             DEFINE_KW_HOOK(i16s, "I16S", add_ttl, 4, build_kw_4arg)
394             DEFINE_KW_HOOK(i16s, "I16S", update_ttl, 4, build_kw_4arg)
395             DEFINE_KW_HOOK(i16s, "I16S", update, 3, build_kw_3arg)
396             DEFINE_KW_HOOK(i16s, "I16S", swap, 3, build_kw_3arg)
397             DEFINE_KW_HOOK(i16s, "I16S", cas, 4, build_kw_4arg)
398             DEFINE_KW_HOOK(i16s, "I16S", cas_take, 3, build_kw_3arg)
399             DEFINE_KW_HOOK(i16s, "I16S", persist, 2, build_kw_2arg)
400             DEFINE_KW_HOOK(i16s, "I16S", set_ttl, 3, build_kw_3arg)
401              
402             /* I32S (int32 -> string, no counters) */
403             DEFINE_KW_HOOK(i32s, "I32S", put, 3, build_kw_3arg)
404             DEFINE_KW_HOOK(i32s, "I32S", get, 2, build_kw_2arg)
405             DEFINE_KW_HOOK(i32s, "I32S", remove, 2, build_kw_2arg)
406             DEFINE_KW_HOOK(i32s, "I32S", exists, 2, build_kw_2arg)
407             DEFINE_KW_HOOK(i32s, "I32S", size, 1, build_kw_1arg)
408             DEFINE_KW_HOOK(i32s, "I32S", keys, 1, build_kw_1arg_list)
409             DEFINE_KW_HOOK(i32s, "I32S", values, 1, build_kw_1arg_list)
410             DEFINE_KW_HOOK(i32s, "I32S", items, 1, build_kw_1arg_list)
411             DEFINE_KW_HOOK(i32s, "I32S", each, 1, build_kw_1arg_list)
412             DEFINE_KW_HOOK(i32s, "I32S", iter_reset, 1, build_kw_1arg)
413             DEFINE_KW_HOOK(i32s, "I32S", clear, 1, build_kw_1arg)
414             DEFINE_KW_HOOK(i32s, "I32S", to_hash, 1, build_kw_1arg)
415             DEFINE_KW_HOOK(i32s, "I32S", max_entries, 1, build_kw_1arg)
416             DEFINE_KW_HOOK(i32s, "I32S", get_or_set, 3, build_kw_3arg)
417             DEFINE_KW_HOOK(i32s, "I32S", put_ttl, 4, build_kw_4arg)
418             DEFINE_KW_HOOK(i32s, "I32S", max_size, 1, build_kw_1arg)
419             DEFINE_KW_HOOK(i32s, "I32S", ttl, 1, build_kw_1arg)
420             DEFINE_KW_HOOK(i32s, "I32S", cursor, 1, build_kw_1arg)
421             DEFINE_KW_HOOK(i32s, "I32S", cursor_next, 1, build_kw_1arg_list)
422             DEFINE_KW_HOOK(i32s, "I32S", cursor_reset, 1, build_kw_1arg)
423             DEFINE_KW_HOOK(i32s, "I32S", cursor_seek, 2, build_kw_2arg)
424             DEFINE_KW_HOOK(i32s, "I32S", ttl_remaining, 2, build_kw_2arg)
425             DEFINE_KW_HOOK(i32s, "I32S", capacity, 1, build_kw_1arg)
426             DEFINE_KW_HOOK(i32s, "I32S", tombstones, 1, build_kw_1arg)
427             DEFINE_KW_HOOK(i32s, "I32S", take, 2, build_kw_2arg)
428             DEFINE_KW_HOOK(i32s, "I32S", pop, 1, build_kw_1arg)
429             DEFINE_KW_HOOK(i32s, "I32S", shift, 1, build_kw_1arg)
430             DEFINE_KW_HOOK(i32s, "I32S", drain, 2, build_kw_2arg)
431             DEFINE_KW_HOOK(i32s, "I32S", flush_expired, 1, build_kw_1arg)
432             DEFINE_KW_HOOK(i32s, "I32S", flush_expired_partial, 2, build_kw_2arg)
433             DEFINE_KW_HOOK(i32s, "I32S", mmap_size, 1, build_kw_1arg)
434             DEFINE_KW_HOOK(i32s, "I32S", touch, 2, build_kw_2arg)
435             DEFINE_KW_HOOK(i32s, "I32S", reserve, 2, build_kw_2arg)
436             DEFINE_KW_HOOK(i32s, "I32S", stat_evictions, 1, build_kw_1arg)
437             DEFINE_KW_HOOK(i32s, "I32S", stat_expired, 1, build_kw_1arg)
438             DEFINE_KW_HOOK(i32s, "I32S", stat_recoveries, 1, build_kw_1arg)
439             DEFINE_KW_HOOK(i32s, "I32S", arena_used, 1, build_kw_1arg)
440             DEFINE_KW_HOOK(i32s, "I32S", arena_cap, 1, build_kw_1arg)
441             DEFINE_KW_HOOK(i32s, "I32S", add, 3, build_kw_3arg)
442             DEFINE_KW_HOOK(i32s, "I32S", add_ttl, 4, build_kw_4arg)
443             DEFINE_KW_HOOK(i32s, "I32S", update_ttl, 4, build_kw_4arg)
444             DEFINE_KW_HOOK(i32s, "I32S", update, 3, build_kw_3arg)
445             DEFINE_KW_HOOK(i32s, "I32S", swap, 3, build_kw_3arg)
446             DEFINE_KW_HOOK(i32s, "I32S", cas, 4, build_kw_4arg)
447             DEFINE_KW_HOOK(i32s, "I32S", cas_take, 3, build_kw_3arg)
448             DEFINE_KW_HOOK(i32s, "I32S", persist, 2, build_kw_2arg)
449             DEFINE_KW_HOOK(i32s, "I32S", set_ttl, 3, build_kw_3arg)
450              
451             /* IS (int64 -> string, no counters) */
452             DEFINE_KW_HOOK(is, "IS", put, 3, build_kw_3arg)
453             DEFINE_KW_HOOK(is, "IS", get, 2, build_kw_2arg)
454             DEFINE_KW_HOOK(is, "IS", remove, 2, build_kw_2arg)
455             DEFINE_KW_HOOK(is, "IS", exists, 2, build_kw_2arg)
456             DEFINE_KW_HOOK(is, "IS", size, 1, build_kw_1arg)
457             DEFINE_KW_HOOK(is, "IS", keys, 1, build_kw_1arg_list)
458             DEFINE_KW_HOOK(is, "IS", values, 1, build_kw_1arg_list)
459             DEFINE_KW_HOOK(is, "IS", items, 1, build_kw_1arg_list)
460             DEFINE_KW_HOOK(is, "IS", each, 1, build_kw_1arg_list)
461             DEFINE_KW_HOOK(is, "IS", iter_reset, 1, build_kw_1arg)
462             DEFINE_KW_HOOK(is, "IS", clear, 1, build_kw_1arg)
463             DEFINE_KW_HOOK(is, "IS", to_hash, 1, build_kw_1arg)
464             DEFINE_KW_HOOK(is, "IS", max_entries, 1, build_kw_1arg)
465             DEFINE_KW_HOOK(is, "IS", get_or_set, 3, build_kw_3arg)
466             DEFINE_KW_HOOK(is, "IS", put_ttl, 4, build_kw_4arg)
467             DEFINE_KW_HOOK(is, "IS", max_size, 1, build_kw_1arg)
468             DEFINE_KW_HOOK(is, "IS", ttl, 1, build_kw_1arg)
469             DEFINE_KW_HOOK(is, "IS", cursor, 1, build_kw_1arg)
470             DEFINE_KW_HOOK(is, "IS", cursor_next, 1, build_kw_1arg_list)
471             DEFINE_KW_HOOK(is, "IS", cursor_reset, 1, build_kw_1arg)
472             DEFINE_KW_HOOK(is, "IS", cursor_seek, 2, build_kw_2arg)
473             DEFINE_KW_HOOK(is, "IS", ttl_remaining, 2, build_kw_2arg)
474             DEFINE_KW_HOOK(is, "IS", capacity, 1, build_kw_1arg)
475             DEFINE_KW_HOOK(is, "IS", tombstones, 1, build_kw_1arg)
476             DEFINE_KW_HOOK(is, "IS", take, 2, build_kw_2arg)
477             DEFINE_KW_HOOK(is, "IS", pop, 1, build_kw_1arg)
478             DEFINE_KW_HOOK(is, "IS", shift, 1, build_kw_1arg)
479             DEFINE_KW_HOOK(is, "IS", drain, 2, build_kw_2arg)
480             DEFINE_KW_HOOK(is, "IS", flush_expired, 1, build_kw_1arg)
481             DEFINE_KW_HOOK(is, "IS", flush_expired_partial, 2, build_kw_2arg)
482             DEFINE_KW_HOOK(is, "IS", mmap_size, 1, build_kw_1arg)
483             DEFINE_KW_HOOK(is, "IS", touch, 2, build_kw_2arg)
484             DEFINE_KW_HOOK(is, "IS", reserve, 2, build_kw_2arg)
485             DEFINE_KW_HOOK(is, "IS", stat_evictions, 1, build_kw_1arg)
486             DEFINE_KW_HOOK(is, "IS", stat_expired, 1, build_kw_1arg)
487             DEFINE_KW_HOOK(is, "IS", stat_recoveries, 1, build_kw_1arg)
488             DEFINE_KW_HOOK(is, "IS", arena_used, 1, build_kw_1arg)
489             DEFINE_KW_HOOK(is, "IS", arena_cap, 1, build_kw_1arg)
490             DEFINE_KW_HOOK(is, "IS", add, 3, build_kw_3arg)
491             DEFINE_KW_HOOK(is, "IS", add_ttl, 4, build_kw_4arg)
492             DEFINE_KW_HOOK(is, "IS", update_ttl, 4, build_kw_4arg)
493             DEFINE_KW_HOOK(is, "IS", update, 3, build_kw_3arg)
494             DEFINE_KW_HOOK(is, "IS", swap, 3, build_kw_3arg)
495             DEFINE_KW_HOOK(is, "IS", cas, 4, build_kw_4arg)
496             DEFINE_KW_HOOK(is, "IS", cas_take, 3, build_kw_3arg)
497             DEFINE_KW_HOOK(is, "IS", persist, 2, build_kw_2arg)
498             DEFINE_KW_HOOK(is, "IS", set_ttl, 3, build_kw_3arg)
499              
500             /* SI16 (string -> int16, counters) */
501             DEFINE_KW_HOOK(si16, "SI16", put, 3, build_kw_3arg)
502             DEFINE_KW_HOOK(si16, "SI16", get, 2, build_kw_2arg)
503             DEFINE_KW_HOOK(si16, "SI16", remove, 2, build_kw_2arg)
504             DEFINE_KW_HOOK(si16, "SI16", exists, 2, build_kw_2arg)
505             DEFINE_KW_HOOK(si16, "SI16", incr, 2, build_kw_2arg)
506             DEFINE_KW_HOOK(si16, "SI16", decr, 2, build_kw_2arg)
507             DEFINE_KW_HOOK(si16, "SI16", incr_by, 3, build_kw_3arg)
508             DEFINE_KW_HOOK(si16, "SI16", max, 3, build_kw_3arg)
509             DEFINE_KW_HOOK(si16, "SI16", min, 3, build_kw_3arg)
510             DEFINE_KW_HOOK(si16, "SI16", size, 1, build_kw_1arg)
511             DEFINE_KW_HOOK(si16, "SI16", keys, 1, build_kw_1arg_list)
512             DEFINE_KW_HOOK(si16, "SI16", values, 1, build_kw_1arg_list)
513             DEFINE_KW_HOOK(si16, "SI16", items, 1, build_kw_1arg_list)
514             DEFINE_KW_HOOK(si16, "SI16", each, 1, build_kw_1arg_list)
515             DEFINE_KW_HOOK(si16, "SI16", iter_reset, 1, build_kw_1arg)
516             DEFINE_KW_HOOK(si16, "SI16", clear, 1, build_kw_1arg)
517             DEFINE_KW_HOOK(si16, "SI16", to_hash, 1, build_kw_1arg)
518             DEFINE_KW_HOOK(si16, "SI16", max_entries, 1, build_kw_1arg)
519             DEFINE_KW_HOOK(si16, "SI16", get_or_set, 3, build_kw_3arg)
520             DEFINE_KW_HOOK(si16, "SI16", put_ttl, 4, build_kw_4arg)
521             DEFINE_KW_HOOK(si16, "SI16", max_size, 1, build_kw_1arg)
522             DEFINE_KW_HOOK(si16, "SI16", ttl, 1, build_kw_1arg)
523             DEFINE_KW_HOOK(si16, "SI16", cursor, 1, build_kw_1arg)
524             DEFINE_KW_HOOK(si16, "SI16", cursor_next, 1, build_kw_1arg_list)
525             DEFINE_KW_HOOK(si16, "SI16", cursor_reset, 1, build_kw_1arg)
526             DEFINE_KW_HOOK(si16, "SI16", cursor_seek, 2, build_kw_2arg)
527             DEFINE_KW_HOOK(si16, "SI16", ttl_remaining, 2, build_kw_2arg)
528             DEFINE_KW_HOOK(si16, "SI16", capacity, 1, build_kw_1arg)
529             DEFINE_KW_HOOK(si16, "SI16", tombstones, 1, build_kw_1arg)
530             DEFINE_KW_HOOK(si16, "SI16", take, 2, build_kw_2arg)
531             DEFINE_KW_HOOK(si16, "SI16", pop, 1, build_kw_1arg)
532             DEFINE_KW_HOOK(si16, "SI16", shift, 1, build_kw_1arg)
533             DEFINE_KW_HOOK(si16, "SI16", drain, 2, build_kw_2arg)
534             DEFINE_KW_HOOK(si16, "SI16", flush_expired, 1, build_kw_1arg)
535             DEFINE_KW_HOOK(si16, "SI16", flush_expired_partial, 2, build_kw_2arg)
536             DEFINE_KW_HOOK(si16, "SI16", mmap_size, 1, build_kw_1arg)
537             DEFINE_KW_HOOK(si16, "SI16", touch, 2, build_kw_2arg)
538             DEFINE_KW_HOOK(si16, "SI16", reserve, 2, build_kw_2arg)
539             DEFINE_KW_HOOK(si16, "SI16", stat_evictions, 1, build_kw_1arg)
540             DEFINE_KW_HOOK(si16, "SI16", stat_expired, 1, build_kw_1arg)
541             DEFINE_KW_HOOK(si16, "SI16", stat_recoveries, 1, build_kw_1arg)
542             DEFINE_KW_HOOK(si16, "SI16", arena_used, 1, build_kw_1arg)
543             DEFINE_KW_HOOK(si16, "SI16", arena_cap, 1, build_kw_1arg)
544             DEFINE_KW_HOOK(si16, "SI16", add, 3, build_kw_3arg)
545             DEFINE_KW_HOOK(si16, "SI16", add_ttl, 4, build_kw_4arg)
546             DEFINE_KW_HOOK(si16, "SI16", update_ttl, 4, build_kw_4arg)
547             DEFINE_KW_HOOK(si16, "SI16", update, 3, build_kw_3arg)
548             DEFINE_KW_HOOK(si16, "SI16", swap, 3, build_kw_3arg)
549             DEFINE_KW_HOOK(si16, "SI16", cas, 4, build_kw_4arg)
550             DEFINE_KW_HOOK(si16, "SI16", cas_take, 3, build_kw_3arg)
551             DEFINE_KW_HOOK(si16, "SI16", persist, 2, build_kw_2arg)
552             DEFINE_KW_HOOK(si16, "SI16", set_ttl, 3, build_kw_3arg)
553              
554             /* SI32 (string -> int32, counters) */
555             DEFINE_KW_HOOK(si32, "SI32", put, 3, build_kw_3arg)
556             DEFINE_KW_HOOK(si32, "SI32", get, 2, build_kw_2arg)
557             DEFINE_KW_HOOK(si32, "SI32", remove, 2, build_kw_2arg)
558             DEFINE_KW_HOOK(si32, "SI32", exists, 2, build_kw_2arg)
559             DEFINE_KW_HOOK(si32, "SI32", incr, 2, build_kw_2arg)
560             DEFINE_KW_HOOK(si32, "SI32", decr, 2, build_kw_2arg)
561             DEFINE_KW_HOOK(si32, "SI32", incr_by, 3, build_kw_3arg)
562             DEFINE_KW_HOOK(si32, "SI32", max, 3, build_kw_3arg)
563             DEFINE_KW_HOOK(si32, "SI32", min, 3, build_kw_3arg)
564             DEFINE_KW_HOOK(si32, "SI32", size, 1, build_kw_1arg)
565             DEFINE_KW_HOOK(si32, "SI32", keys, 1, build_kw_1arg_list)
566             DEFINE_KW_HOOK(si32, "SI32", values, 1, build_kw_1arg_list)
567             DEFINE_KW_HOOK(si32, "SI32", items, 1, build_kw_1arg_list)
568             DEFINE_KW_HOOK(si32, "SI32", each, 1, build_kw_1arg_list)
569             DEFINE_KW_HOOK(si32, "SI32", iter_reset, 1, build_kw_1arg)
570             DEFINE_KW_HOOK(si32, "SI32", clear, 1, build_kw_1arg)
571             DEFINE_KW_HOOK(si32, "SI32", to_hash, 1, build_kw_1arg)
572             DEFINE_KW_HOOK(si32, "SI32", max_entries, 1, build_kw_1arg)
573             DEFINE_KW_HOOK(si32, "SI32", get_or_set, 3, build_kw_3arg)
574             DEFINE_KW_HOOK(si32, "SI32", put_ttl, 4, build_kw_4arg)
575             DEFINE_KW_HOOK(si32, "SI32", max_size, 1, build_kw_1arg)
576             DEFINE_KW_HOOK(si32, "SI32", ttl, 1, build_kw_1arg)
577             DEFINE_KW_HOOK(si32, "SI32", cursor, 1, build_kw_1arg)
578             DEFINE_KW_HOOK(si32, "SI32", cursor_next, 1, build_kw_1arg_list)
579             DEFINE_KW_HOOK(si32, "SI32", cursor_reset, 1, build_kw_1arg)
580             DEFINE_KW_HOOK(si32, "SI32", cursor_seek, 2, build_kw_2arg)
581             DEFINE_KW_HOOK(si32, "SI32", ttl_remaining, 2, build_kw_2arg)
582             DEFINE_KW_HOOK(si32, "SI32", capacity, 1, build_kw_1arg)
583             DEFINE_KW_HOOK(si32, "SI32", tombstones, 1, build_kw_1arg)
584             DEFINE_KW_HOOK(si32, "SI32", take, 2, build_kw_2arg)
585             DEFINE_KW_HOOK(si32, "SI32", pop, 1, build_kw_1arg)
586             DEFINE_KW_HOOK(si32, "SI32", shift, 1, build_kw_1arg)
587             DEFINE_KW_HOOK(si32, "SI32", drain, 2, build_kw_2arg)
588             DEFINE_KW_HOOK(si32, "SI32", flush_expired, 1, build_kw_1arg)
589             DEFINE_KW_HOOK(si32, "SI32", flush_expired_partial, 2, build_kw_2arg)
590             DEFINE_KW_HOOK(si32, "SI32", mmap_size, 1, build_kw_1arg)
591             DEFINE_KW_HOOK(si32, "SI32", touch, 2, build_kw_2arg)
592             DEFINE_KW_HOOK(si32, "SI32", reserve, 2, build_kw_2arg)
593             DEFINE_KW_HOOK(si32, "SI32", stat_evictions, 1, build_kw_1arg)
594             DEFINE_KW_HOOK(si32, "SI32", stat_expired, 1, build_kw_1arg)
595             DEFINE_KW_HOOK(si32, "SI32", stat_recoveries, 1, build_kw_1arg)
596             DEFINE_KW_HOOK(si32, "SI32", arena_used, 1, build_kw_1arg)
597             DEFINE_KW_HOOK(si32, "SI32", arena_cap, 1, build_kw_1arg)
598             DEFINE_KW_HOOK(si32, "SI32", add, 3, build_kw_3arg)
599             DEFINE_KW_HOOK(si32, "SI32", add_ttl, 4, build_kw_4arg)
600             DEFINE_KW_HOOK(si32, "SI32", update_ttl, 4, build_kw_4arg)
601             DEFINE_KW_HOOK(si32, "SI32", update, 3, build_kw_3arg)
602             DEFINE_KW_HOOK(si32, "SI32", swap, 3, build_kw_3arg)
603             DEFINE_KW_HOOK(si32, "SI32", cas, 4, build_kw_4arg)
604             DEFINE_KW_HOOK(si32, "SI32", cas_take, 3, build_kw_3arg)
605             DEFINE_KW_HOOK(si32, "SI32", persist, 2, build_kw_2arg)
606             DEFINE_KW_HOOK(si32, "SI32", set_ttl, 3, build_kw_3arg)
607              
608             /* SI (string -> int64, counters) */
609             DEFINE_KW_HOOK(si, "SI", put, 3, build_kw_3arg)
610             DEFINE_KW_HOOK(si, "SI", get, 2, build_kw_2arg)
611             DEFINE_KW_HOOK(si, "SI", remove, 2, build_kw_2arg)
612             DEFINE_KW_HOOK(si, "SI", exists, 2, build_kw_2arg)
613             DEFINE_KW_HOOK(si, "SI", incr, 2, build_kw_2arg)
614             DEFINE_KW_HOOK(si, "SI", decr, 2, build_kw_2arg)
615             DEFINE_KW_HOOK(si, "SI", incr_by, 3, build_kw_3arg)
616             DEFINE_KW_HOOK(si, "SI", max, 3, build_kw_3arg)
617             DEFINE_KW_HOOK(si, "SI", min, 3, build_kw_3arg)
618             DEFINE_KW_HOOK(si, "SI", size, 1, build_kw_1arg)
619             DEFINE_KW_HOOK(si, "SI", keys, 1, build_kw_1arg_list)
620             DEFINE_KW_HOOK(si, "SI", values, 1, build_kw_1arg_list)
621             DEFINE_KW_HOOK(si, "SI", items, 1, build_kw_1arg_list)
622             DEFINE_KW_HOOK(si, "SI", each, 1, build_kw_1arg_list)
623             DEFINE_KW_HOOK(si, "SI", iter_reset, 1, build_kw_1arg)
624             DEFINE_KW_HOOK(si, "SI", clear, 1, build_kw_1arg)
625             DEFINE_KW_HOOK(si, "SI", to_hash, 1, build_kw_1arg)
626             DEFINE_KW_HOOK(si, "SI", max_entries, 1, build_kw_1arg)
627             DEFINE_KW_HOOK(si, "SI", get_or_set, 3, build_kw_3arg)
628             DEFINE_KW_HOOK(si, "SI", put_ttl, 4, build_kw_4arg)
629             DEFINE_KW_HOOK(si, "SI", max_size, 1, build_kw_1arg)
630             DEFINE_KW_HOOK(si, "SI", ttl, 1, build_kw_1arg)
631             DEFINE_KW_HOOK(si, "SI", cursor, 1, build_kw_1arg)
632             DEFINE_KW_HOOK(si, "SI", cursor_next, 1, build_kw_1arg_list)
633             DEFINE_KW_HOOK(si, "SI", cursor_reset, 1, build_kw_1arg)
634             DEFINE_KW_HOOK(si, "SI", cursor_seek, 2, build_kw_2arg)
635             DEFINE_KW_HOOK(si, "SI", ttl_remaining, 2, build_kw_2arg)
636             DEFINE_KW_HOOK(si, "SI", capacity, 1, build_kw_1arg)
637             DEFINE_KW_HOOK(si, "SI", tombstones, 1, build_kw_1arg)
638             DEFINE_KW_HOOK(si, "SI", take, 2, build_kw_2arg)
639             DEFINE_KW_HOOK(si, "SI", pop, 1, build_kw_1arg)
640             DEFINE_KW_HOOK(si, "SI", shift, 1, build_kw_1arg)
641             DEFINE_KW_HOOK(si, "SI", drain, 2, build_kw_2arg)
642             DEFINE_KW_HOOK(si, "SI", flush_expired, 1, build_kw_1arg)
643             DEFINE_KW_HOOK(si, "SI", flush_expired_partial, 2, build_kw_2arg)
644             DEFINE_KW_HOOK(si, "SI", mmap_size, 1, build_kw_1arg)
645             DEFINE_KW_HOOK(si, "SI", touch, 2, build_kw_2arg)
646             DEFINE_KW_HOOK(si, "SI", reserve, 2, build_kw_2arg)
647             DEFINE_KW_HOOK(si, "SI", stat_evictions, 1, build_kw_1arg)
648             DEFINE_KW_HOOK(si, "SI", stat_expired, 1, build_kw_1arg)
649             DEFINE_KW_HOOK(si, "SI", stat_recoveries, 1, build_kw_1arg)
650             DEFINE_KW_HOOK(si, "SI", arena_used, 1, build_kw_1arg)
651             DEFINE_KW_HOOK(si, "SI", arena_cap, 1, build_kw_1arg)
652             DEFINE_KW_HOOK(si, "SI", add, 3, build_kw_3arg)
653             DEFINE_KW_HOOK(si, "SI", add_ttl, 4, build_kw_4arg)
654             DEFINE_KW_HOOK(si, "SI", update_ttl, 4, build_kw_4arg)
655             DEFINE_KW_HOOK(si, "SI", update, 3, build_kw_3arg)
656             DEFINE_KW_HOOK(si, "SI", swap, 3, build_kw_3arg)
657             DEFINE_KW_HOOK(si, "SI", cas, 4, build_kw_4arg)
658             DEFINE_KW_HOOK(si, "SI", cas_take, 3, build_kw_3arg)
659             DEFINE_KW_HOOK(si, "SI", persist, 2, build_kw_2arg)
660             DEFINE_KW_HOOK(si, "SI", set_ttl, 3, build_kw_3arg)
661              
662             /* SS (string -> string, no counters) */
663             DEFINE_KW_HOOK(ss, "SS", put, 3, build_kw_3arg)
664             DEFINE_KW_HOOK(ss, "SS", get, 2, build_kw_2arg)
665             DEFINE_KW_HOOK(ss, "SS", remove, 2, build_kw_2arg)
666             DEFINE_KW_HOOK(ss, "SS", exists, 2, build_kw_2arg)
667             DEFINE_KW_HOOK(ss, "SS", size, 1, build_kw_1arg)
668             DEFINE_KW_HOOK(ss, "SS", keys, 1, build_kw_1arg_list)
669             DEFINE_KW_HOOK(ss, "SS", values, 1, build_kw_1arg_list)
670             DEFINE_KW_HOOK(ss, "SS", items, 1, build_kw_1arg_list)
671             DEFINE_KW_HOOK(ss, "SS", each, 1, build_kw_1arg_list)
672             DEFINE_KW_HOOK(ss, "SS", iter_reset, 1, build_kw_1arg)
673             DEFINE_KW_HOOK(ss, "SS", clear, 1, build_kw_1arg)
674             DEFINE_KW_HOOK(ss, "SS", to_hash, 1, build_kw_1arg)
675             DEFINE_KW_HOOK(ss, "SS", max_entries, 1, build_kw_1arg)
676             DEFINE_KW_HOOK(ss, "SS", get_or_set, 3, build_kw_3arg)
677             DEFINE_KW_HOOK(ss, "SS", put_ttl, 4, build_kw_4arg)
678             DEFINE_KW_HOOK(ss, "SS", max_size, 1, build_kw_1arg)
679             DEFINE_KW_HOOK(ss, "SS", ttl, 1, build_kw_1arg)
680             DEFINE_KW_HOOK(ss, "SS", cursor, 1, build_kw_1arg)
681             DEFINE_KW_HOOK(ss, "SS", cursor_next, 1, build_kw_1arg_list)
682             DEFINE_KW_HOOK(ss, "SS", cursor_reset, 1, build_kw_1arg)
683             DEFINE_KW_HOOK(ss, "SS", cursor_seek, 2, build_kw_2arg)
684             DEFINE_KW_HOOK(ss, "SS", ttl_remaining, 2, build_kw_2arg)
685             DEFINE_KW_HOOK(ss, "SS", capacity, 1, build_kw_1arg)
686             DEFINE_KW_HOOK(ss, "SS", tombstones, 1, build_kw_1arg)
687             DEFINE_KW_HOOK(ss, "SS", take, 2, build_kw_2arg)
688             DEFINE_KW_HOOK(ss, "SS", pop, 1, build_kw_1arg)
689             DEFINE_KW_HOOK(ss, "SS", shift, 1, build_kw_1arg)
690             DEFINE_KW_HOOK(ss, "SS", drain, 2, build_kw_2arg)
691             DEFINE_KW_HOOK(ss, "SS", flush_expired, 1, build_kw_1arg)
692             DEFINE_KW_HOOK(ss, "SS", flush_expired_partial, 2, build_kw_2arg)
693             DEFINE_KW_HOOK(ss, "SS", mmap_size, 1, build_kw_1arg)
694             DEFINE_KW_HOOK(ss, "SS", touch, 2, build_kw_2arg)
695             DEFINE_KW_HOOK(ss, "SS", reserve, 2, build_kw_2arg)
696             DEFINE_KW_HOOK(ss, "SS", stat_evictions, 1, build_kw_1arg)
697             DEFINE_KW_HOOK(ss, "SS", stat_expired, 1, build_kw_1arg)
698             DEFINE_KW_HOOK(ss, "SS", stat_recoveries, 1, build_kw_1arg)
699             DEFINE_KW_HOOK(ss, "SS", arena_used, 1, build_kw_1arg)
700             DEFINE_KW_HOOK(ss, "SS", arena_cap, 1, build_kw_1arg)
701             DEFINE_KW_HOOK(ss, "SS", add, 3, build_kw_3arg)
702             DEFINE_KW_HOOK(ss, "SS", add_ttl, 4, build_kw_4arg)
703             DEFINE_KW_HOOK(ss, "SS", update_ttl, 4, build_kw_4arg)
704             DEFINE_KW_HOOK(ss, "SS", update, 3, build_kw_3arg)
705             DEFINE_KW_HOOK(ss, "SS", swap, 3, build_kw_3arg)
706             DEFINE_KW_HOOK(ss, "SS", cas, 4, build_kw_4arg)
707             DEFINE_KW_HOOK(ss, "SS", cas_take, 3, build_kw_3arg)
708             DEFINE_KW_HOOK(ss, "SS", persist, 2, build_kw_2arg)
709             DEFINE_KW_HOOK(ss, "SS", set_ttl, 3, build_kw_3arg)
710              
711             /* ---- Register keyword macro ---- */
712              
713             #define REGISTER_KW(variant, kw, func_name) \
714             register_xs_parse_keyword("shm_" #variant "_" #kw, \
715             &hooks_shm_##variant##_##kw, (void*)func_name)
716              
717              
718             /* ============================================================
719             * MODULE/PACKAGE sections
720             * ============================================================ */
721              
722              
723             MODULE = Data::HashMap::Shared PACKAGE = Data::HashMap::Shared::I16
724             PROTOTYPES: DISABLE
725              
726             BOOT:
727 20           boot_xs_parse_keyword(0.40);
728             /* I16 */
729 20           REGISTER_KW(i16, put, "Data::HashMap::Shared::I16::put");
730 20           REGISTER_KW(i16, get, "Data::HashMap::Shared::I16::get");
731 20           REGISTER_KW(i16, remove, "Data::HashMap::Shared::I16::remove");
732 20           REGISTER_KW(i16, exists, "Data::HashMap::Shared::I16::exists");
733 20           REGISTER_KW(i16, incr, "Data::HashMap::Shared::I16::incr");
734 20           REGISTER_KW(i16, decr, "Data::HashMap::Shared::I16::decr");
735 20           REGISTER_KW(i16, incr_by, "Data::HashMap::Shared::I16::incr_by");
736 20           REGISTER_KW(i16, max, "Data::HashMap::Shared::I16::max");
737 20           REGISTER_KW(i16, min, "Data::HashMap::Shared::I16::min");
738 20           REGISTER_KW(i16, size, "Data::HashMap::Shared::I16::size");
739 20           REGISTER_KW(i16, keys, "Data::HashMap::Shared::I16::keys");
740 20           REGISTER_KW(i16, values, "Data::HashMap::Shared::I16::values");
741 20           REGISTER_KW(i16, items, "Data::HashMap::Shared::I16::items");
742 20           REGISTER_KW(i16, each, "Data::HashMap::Shared::I16::each");
743 20           REGISTER_KW(i16, iter_reset, "Data::HashMap::Shared::I16::iter_reset");
744 20           REGISTER_KW(i16, clear, "Data::HashMap::Shared::I16::clear");
745 20           REGISTER_KW(i16, to_hash, "Data::HashMap::Shared::I16::to_hash");
746 20           REGISTER_KW(i16, max_entries, "Data::HashMap::Shared::I16::max_entries");
747 20           REGISTER_KW(i16, get_or_set, "Data::HashMap::Shared::I16::get_or_set");
748 20           REGISTER_KW(i16, put_ttl, "Data::HashMap::Shared::I16::put_ttl");
749 20           REGISTER_KW(i16, max_size, "Data::HashMap::Shared::I16::max_size");
750 20           REGISTER_KW(i16, ttl, "Data::HashMap::Shared::I16::ttl");
751 20           REGISTER_KW(i16, cursor, "Data::HashMap::Shared::I16::cursor");
752 20           REGISTER_KW(i16, cursor_next, "Data::HashMap::Shared::I16::Cursor::next");
753 20           REGISTER_KW(i16, cursor_reset, "Data::HashMap::Shared::I16::Cursor::reset");
754 20           REGISTER_KW(i16, cursor_seek, "Data::HashMap::Shared::I16::Cursor::seek");
755 20           REGISTER_KW(i16, ttl_remaining, "Data::HashMap::Shared::I16::ttl_remaining");
756 20           REGISTER_KW(i16, capacity, "Data::HashMap::Shared::I16::capacity");
757 20           REGISTER_KW(i16, tombstones, "Data::HashMap::Shared::I16::tombstones");
758 20           REGISTER_KW(i16, take, "Data::HashMap::Shared::I16::take");
759 20           REGISTER_KW(i16, pop, "Data::HashMap::Shared::I16::pop");
760 20           REGISTER_KW(i16, shift, "Data::HashMap::Shared::I16::shift");
761 20           REGISTER_KW(i16, drain, "Data::HashMap::Shared::I16::drain");
762 20           REGISTER_KW(i16, flush_expired, "Data::HashMap::Shared::I16::flush_expired");
763 20           REGISTER_KW(i16, flush_expired_partial, "Data::HashMap::Shared::I16::flush_expired_partial");
764 20           REGISTER_KW(i16, mmap_size, "Data::HashMap::Shared::I16::mmap_size");
765 20           REGISTER_KW(i16, touch, "Data::HashMap::Shared::I16::touch");
766 20           REGISTER_KW(i16, reserve, "Data::HashMap::Shared::I16::reserve");
767 20           REGISTER_KW(i16, stat_evictions, "Data::HashMap::Shared::I16::stat_evictions");
768 20           REGISTER_KW(i16, stat_expired, "Data::HashMap::Shared::I16::stat_expired");
769 20           REGISTER_KW(i16, stat_recoveries, "Data::HashMap::Shared::I16::stat_recoveries");
770 20           REGISTER_KW(i16, arena_used, "Data::HashMap::Shared::I16::arena_used");
771 20           REGISTER_KW(i16, arena_cap, "Data::HashMap::Shared::I16::arena_cap");
772 20           REGISTER_KW(i16, add, "Data::HashMap::Shared::I16::add");
773 20           REGISTER_KW(i16, add_ttl, "Data::HashMap::Shared::I16::add_ttl");
774 20           REGISTER_KW(i16, update_ttl, "Data::HashMap::Shared::I16::update_ttl");
775 20           REGISTER_KW(i16, update, "Data::HashMap::Shared::I16::update");
776 20           REGISTER_KW(i16, swap, "Data::HashMap::Shared::I16::swap");
777 20           REGISTER_KW(i16, cas, "Data::HashMap::Shared::I16::cas");
778 20           REGISTER_KW(i16, cas_take, "Data::HashMap::Shared::I16::cas_take");
779 20           REGISTER_KW(i16, persist, "Data::HashMap::Shared::I16::persist");
780 20           REGISTER_KW(i16, set_ttl, "Data::HashMap::Shared::I16::set_ttl");
781 20           REGISTER_KW(i32, put, "Data::HashMap::Shared::I32::put");
782 20           REGISTER_KW(i32, get, "Data::HashMap::Shared::I32::get");
783 20           REGISTER_KW(i32, remove, "Data::HashMap::Shared::I32::remove");
784 20           REGISTER_KW(i32, exists, "Data::HashMap::Shared::I32::exists");
785 20           REGISTER_KW(i32, incr, "Data::HashMap::Shared::I32::incr");
786 20           REGISTER_KW(i32, decr, "Data::HashMap::Shared::I32::decr");
787 20           REGISTER_KW(i32, incr_by, "Data::HashMap::Shared::I32::incr_by");
788 20           REGISTER_KW(i32, max, "Data::HashMap::Shared::I32::max");
789 20           REGISTER_KW(i32, min, "Data::HashMap::Shared::I32::min");
790 20           REGISTER_KW(i32, size, "Data::HashMap::Shared::I32::size");
791 20           REGISTER_KW(i32, keys, "Data::HashMap::Shared::I32::keys");
792 20           REGISTER_KW(i32, values, "Data::HashMap::Shared::I32::values");
793 20           REGISTER_KW(i32, items, "Data::HashMap::Shared::I32::items");
794 20           REGISTER_KW(i32, each, "Data::HashMap::Shared::I32::each");
795 20           REGISTER_KW(i32, iter_reset, "Data::HashMap::Shared::I32::iter_reset");
796 20           REGISTER_KW(i32, clear, "Data::HashMap::Shared::I32::clear");
797 20           REGISTER_KW(i32, to_hash, "Data::HashMap::Shared::I32::to_hash");
798 20           REGISTER_KW(i32, max_entries, "Data::HashMap::Shared::I32::max_entries");
799 20           REGISTER_KW(i32, get_or_set, "Data::HashMap::Shared::I32::get_or_set");
800 20           REGISTER_KW(i32, put_ttl, "Data::HashMap::Shared::I32::put_ttl");
801 20           REGISTER_KW(i32, max_size, "Data::HashMap::Shared::I32::max_size");
802 20           REGISTER_KW(i32, ttl, "Data::HashMap::Shared::I32::ttl");
803 20           REGISTER_KW(i32, cursor, "Data::HashMap::Shared::I32::cursor");
804 20           REGISTER_KW(i32, cursor_next, "Data::HashMap::Shared::I32::Cursor::next");
805 20           REGISTER_KW(i32, cursor_reset, "Data::HashMap::Shared::I32::Cursor::reset");
806 20           REGISTER_KW(i32, cursor_seek, "Data::HashMap::Shared::I32::Cursor::seek");
807 20           REGISTER_KW(i32, ttl_remaining, "Data::HashMap::Shared::I32::ttl_remaining");
808 20           REGISTER_KW(i32, capacity, "Data::HashMap::Shared::I32::capacity");
809 20           REGISTER_KW(i32, tombstones, "Data::HashMap::Shared::I32::tombstones");
810 20           REGISTER_KW(i32, take, "Data::HashMap::Shared::I32::take");
811 20           REGISTER_KW(i32, pop, "Data::HashMap::Shared::I32::pop");
812 20           REGISTER_KW(i32, shift, "Data::HashMap::Shared::I32::shift");
813 20           REGISTER_KW(i32, drain, "Data::HashMap::Shared::I32::drain");
814 20           REGISTER_KW(i32, flush_expired, "Data::HashMap::Shared::I32::flush_expired");
815 20           REGISTER_KW(i32, flush_expired_partial, "Data::HashMap::Shared::I32::flush_expired_partial");
816 20           REGISTER_KW(i32, mmap_size, "Data::HashMap::Shared::I32::mmap_size");
817 20           REGISTER_KW(i32, touch, "Data::HashMap::Shared::I32::touch");
818 20           REGISTER_KW(i32, reserve, "Data::HashMap::Shared::I32::reserve");
819 20           REGISTER_KW(i32, stat_evictions, "Data::HashMap::Shared::I32::stat_evictions");
820 20           REGISTER_KW(i32, stat_expired, "Data::HashMap::Shared::I32::stat_expired");
821 20           REGISTER_KW(i32, stat_recoveries, "Data::HashMap::Shared::I32::stat_recoveries");
822 20           REGISTER_KW(i32, arena_used, "Data::HashMap::Shared::I32::arena_used");
823 20           REGISTER_KW(i32, arena_cap, "Data::HashMap::Shared::I32::arena_cap");
824 20           REGISTER_KW(i32, add, "Data::HashMap::Shared::I32::add");
825 20           REGISTER_KW(i32, add_ttl, "Data::HashMap::Shared::I32::add_ttl");
826 20           REGISTER_KW(i32, update_ttl, "Data::HashMap::Shared::I32::update_ttl");
827 20           REGISTER_KW(i32, update, "Data::HashMap::Shared::I32::update");
828 20           REGISTER_KW(i32, swap, "Data::HashMap::Shared::I32::swap");
829 20           REGISTER_KW(i32, cas, "Data::HashMap::Shared::I32::cas");
830 20           REGISTER_KW(i32, cas_take, "Data::HashMap::Shared::I32::cas_take");
831 20           REGISTER_KW(i32, persist, "Data::HashMap::Shared::I32::persist");
832 20           REGISTER_KW(i32, set_ttl, "Data::HashMap::Shared::I32::set_ttl");
833 20           REGISTER_KW(ii, put, "Data::HashMap::Shared::II::put");
834 20           REGISTER_KW(ii, get, "Data::HashMap::Shared::II::get");
835 20           REGISTER_KW(ii, remove, "Data::HashMap::Shared::II::remove");
836 20           REGISTER_KW(ii, exists, "Data::HashMap::Shared::II::exists");
837 20           REGISTER_KW(ii, incr, "Data::HashMap::Shared::II::incr");
838 20           REGISTER_KW(ii, decr, "Data::HashMap::Shared::II::decr");
839 20           REGISTER_KW(ii, incr_by, "Data::HashMap::Shared::II::incr_by");
840 20           REGISTER_KW(ii, max, "Data::HashMap::Shared::II::max");
841 20           REGISTER_KW(ii, min, "Data::HashMap::Shared::II::min");
842 20           REGISTER_KW(ii, size, "Data::HashMap::Shared::II::size");
843 20           REGISTER_KW(ii, keys, "Data::HashMap::Shared::II::keys");
844 20           REGISTER_KW(ii, values, "Data::HashMap::Shared::II::values");
845 20           REGISTER_KW(ii, items, "Data::HashMap::Shared::II::items");
846 20           REGISTER_KW(ii, each, "Data::HashMap::Shared::II::each");
847 20           REGISTER_KW(ii, iter_reset, "Data::HashMap::Shared::II::iter_reset");
848 20           REGISTER_KW(ii, clear, "Data::HashMap::Shared::II::clear");
849 20           REGISTER_KW(ii, to_hash, "Data::HashMap::Shared::II::to_hash");
850 20           REGISTER_KW(ii, max_entries, "Data::HashMap::Shared::II::max_entries");
851 20           REGISTER_KW(ii, get_or_set, "Data::HashMap::Shared::II::get_or_set");
852 20           REGISTER_KW(ii, put_ttl, "Data::HashMap::Shared::II::put_ttl");
853 20           REGISTER_KW(ii, max_size, "Data::HashMap::Shared::II::max_size");
854 20           REGISTER_KW(ii, ttl, "Data::HashMap::Shared::II::ttl");
855 20           REGISTER_KW(ii, cursor, "Data::HashMap::Shared::II::cursor");
856 20           REGISTER_KW(ii, cursor_next, "Data::HashMap::Shared::II::Cursor::next");
857 20           REGISTER_KW(ii, cursor_reset, "Data::HashMap::Shared::II::Cursor::reset");
858 20           REGISTER_KW(ii, cursor_seek, "Data::HashMap::Shared::II::Cursor::seek");
859 20           REGISTER_KW(ii, ttl_remaining, "Data::HashMap::Shared::II::ttl_remaining");
860 20           REGISTER_KW(ii, capacity, "Data::HashMap::Shared::II::capacity");
861 20           REGISTER_KW(ii, tombstones, "Data::HashMap::Shared::II::tombstones");
862 20           REGISTER_KW(ii, take, "Data::HashMap::Shared::II::take");
863 20           REGISTER_KW(ii, pop, "Data::HashMap::Shared::II::pop");
864 20           REGISTER_KW(ii, shift, "Data::HashMap::Shared::II::shift");
865 20           REGISTER_KW(ii, drain, "Data::HashMap::Shared::II::drain");
866 20           REGISTER_KW(ii, flush_expired, "Data::HashMap::Shared::II::flush_expired");
867 20           REGISTER_KW(ii, flush_expired_partial, "Data::HashMap::Shared::II::flush_expired_partial");
868 20           REGISTER_KW(ii, mmap_size, "Data::HashMap::Shared::II::mmap_size");
869 20           REGISTER_KW(ii, touch, "Data::HashMap::Shared::II::touch");
870 20           REGISTER_KW(ii, reserve, "Data::HashMap::Shared::II::reserve");
871 20           REGISTER_KW(ii, stat_evictions, "Data::HashMap::Shared::II::stat_evictions");
872 20           REGISTER_KW(ii, stat_expired, "Data::HashMap::Shared::II::stat_expired");
873 20           REGISTER_KW(ii, stat_recoveries, "Data::HashMap::Shared::II::stat_recoveries");
874 20           REGISTER_KW(ii, arena_used, "Data::HashMap::Shared::II::arena_used");
875 20           REGISTER_KW(ii, arena_cap, "Data::HashMap::Shared::II::arena_cap");
876 20           REGISTER_KW(ii, add, "Data::HashMap::Shared::II::add");
877 20           REGISTER_KW(ii, add_ttl, "Data::HashMap::Shared::II::add_ttl");
878 20           REGISTER_KW(ii, update_ttl, "Data::HashMap::Shared::II::update_ttl");
879 20           REGISTER_KW(ii, update, "Data::HashMap::Shared::II::update");
880 20           REGISTER_KW(ii, swap, "Data::HashMap::Shared::II::swap");
881 20           REGISTER_KW(ii, cas, "Data::HashMap::Shared::II::cas");
882 20           REGISTER_KW(ii, cas_take, "Data::HashMap::Shared::II::cas_take");
883 20           REGISTER_KW(ii, persist, "Data::HashMap::Shared::II::persist");
884 20           REGISTER_KW(ii, set_ttl, "Data::HashMap::Shared::II::set_ttl");
885 20           REGISTER_KW(i16s, put, "Data::HashMap::Shared::I16S::put");
886 20           REGISTER_KW(i16s, get, "Data::HashMap::Shared::I16S::get");
887 20           REGISTER_KW(i16s, remove, "Data::HashMap::Shared::I16S::remove");
888 20           REGISTER_KW(i16s, exists, "Data::HashMap::Shared::I16S::exists");
889 20           REGISTER_KW(i16s, size, "Data::HashMap::Shared::I16S::size");
890 20           REGISTER_KW(i16s, keys, "Data::HashMap::Shared::I16S::keys");
891 20           REGISTER_KW(i16s, values, "Data::HashMap::Shared::I16S::values");
892 20           REGISTER_KW(i16s, items, "Data::HashMap::Shared::I16S::items");
893 20           REGISTER_KW(i16s, each, "Data::HashMap::Shared::I16S::each");
894 20           REGISTER_KW(i16s, iter_reset, "Data::HashMap::Shared::I16S::iter_reset");
895 20           REGISTER_KW(i16s, clear, "Data::HashMap::Shared::I16S::clear");
896 20           REGISTER_KW(i16s, to_hash, "Data::HashMap::Shared::I16S::to_hash");
897 20           REGISTER_KW(i16s, max_entries, "Data::HashMap::Shared::I16S::max_entries");
898 20           REGISTER_KW(i16s, get_or_set, "Data::HashMap::Shared::I16S::get_or_set");
899 20           REGISTER_KW(i16s, put_ttl, "Data::HashMap::Shared::I16S::put_ttl");
900 20           REGISTER_KW(i16s, max_size, "Data::HashMap::Shared::I16S::max_size");
901 20           REGISTER_KW(i16s, ttl, "Data::HashMap::Shared::I16S::ttl");
902 20           REGISTER_KW(i16s, cursor, "Data::HashMap::Shared::I16S::cursor");
903 20           REGISTER_KW(i16s, cursor_next, "Data::HashMap::Shared::I16S::Cursor::next");
904 20           REGISTER_KW(i16s, cursor_reset, "Data::HashMap::Shared::I16S::Cursor::reset");
905 20           REGISTER_KW(i16s, cursor_seek, "Data::HashMap::Shared::I16S::Cursor::seek");
906 20           REGISTER_KW(i16s, ttl_remaining, "Data::HashMap::Shared::I16S::ttl_remaining");
907 20           REGISTER_KW(i16s, capacity, "Data::HashMap::Shared::I16S::capacity");
908 20           REGISTER_KW(i16s, tombstones, "Data::HashMap::Shared::I16S::tombstones");
909 20           REGISTER_KW(i16s, take, "Data::HashMap::Shared::I16S::take");
910 20           REGISTER_KW(i16s, pop, "Data::HashMap::Shared::I16S::pop");
911 20           REGISTER_KW(i16s, shift, "Data::HashMap::Shared::I16S::shift");
912 20           REGISTER_KW(i16s, drain, "Data::HashMap::Shared::I16S::drain");
913 20           REGISTER_KW(i16s, flush_expired, "Data::HashMap::Shared::I16S::flush_expired");
914 20           REGISTER_KW(i16s, flush_expired_partial, "Data::HashMap::Shared::I16S::flush_expired_partial");
915 20           REGISTER_KW(i16s, mmap_size, "Data::HashMap::Shared::I16S::mmap_size");
916 20           REGISTER_KW(i16s, touch, "Data::HashMap::Shared::I16S::touch");
917 20           REGISTER_KW(i16s, reserve, "Data::HashMap::Shared::I16S::reserve");
918 20           REGISTER_KW(i16s, stat_evictions, "Data::HashMap::Shared::I16S::stat_evictions");
919 20           REGISTER_KW(i16s, stat_expired, "Data::HashMap::Shared::I16S::stat_expired");
920 20           REGISTER_KW(i16s, stat_recoveries, "Data::HashMap::Shared::I16S::stat_recoveries");
921 20           REGISTER_KW(i16s, arena_used, "Data::HashMap::Shared::I16S::arena_used");
922 20           REGISTER_KW(i16s, arena_cap, "Data::HashMap::Shared::I16S::arena_cap");
923 20           REGISTER_KW(i16s, add, "Data::HashMap::Shared::I16S::add");
924 20           REGISTER_KW(i16s, add_ttl, "Data::HashMap::Shared::I16S::add_ttl");
925 20           REGISTER_KW(i16s, update_ttl, "Data::HashMap::Shared::I16S::update_ttl");
926 20           REGISTER_KW(i16s, update, "Data::HashMap::Shared::I16S::update");
927 20           REGISTER_KW(i16s, swap, "Data::HashMap::Shared::I16S::swap");
928 20           REGISTER_KW(i16s, cas, "Data::HashMap::Shared::I16S::cas");
929 20           REGISTER_KW(i16s, cas_take, "Data::HashMap::Shared::I16S::cas_take");
930 20           REGISTER_KW(i16s, persist, "Data::HashMap::Shared::I16S::persist");
931 20           REGISTER_KW(i16s, set_ttl, "Data::HashMap::Shared::I16S::set_ttl");
932 20           REGISTER_KW(i32s, put, "Data::HashMap::Shared::I32S::put");
933 20           REGISTER_KW(i32s, get, "Data::HashMap::Shared::I32S::get");
934 20           REGISTER_KW(i32s, remove, "Data::HashMap::Shared::I32S::remove");
935 20           REGISTER_KW(i32s, exists, "Data::HashMap::Shared::I32S::exists");
936 20           REGISTER_KW(i32s, size, "Data::HashMap::Shared::I32S::size");
937 20           REGISTER_KW(i32s, keys, "Data::HashMap::Shared::I32S::keys");
938 20           REGISTER_KW(i32s, values, "Data::HashMap::Shared::I32S::values");
939 20           REGISTER_KW(i32s, items, "Data::HashMap::Shared::I32S::items");
940 20           REGISTER_KW(i32s, each, "Data::HashMap::Shared::I32S::each");
941 20           REGISTER_KW(i32s, iter_reset, "Data::HashMap::Shared::I32S::iter_reset");
942 20           REGISTER_KW(i32s, clear, "Data::HashMap::Shared::I32S::clear");
943 20           REGISTER_KW(i32s, to_hash, "Data::HashMap::Shared::I32S::to_hash");
944 20           REGISTER_KW(i32s, max_entries, "Data::HashMap::Shared::I32S::max_entries");
945 20           REGISTER_KW(i32s, get_or_set, "Data::HashMap::Shared::I32S::get_or_set");
946 20           REGISTER_KW(i32s, put_ttl, "Data::HashMap::Shared::I32S::put_ttl");
947 20           REGISTER_KW(i32s, max_size, "Data::HashMap::Shared::I32S::max_size");
948 20           REGISTER_KW(i32s, ttl, "Data::HashMap::Shared::I32S::ttl");
949 20           REGISTER_KW(i32s, cursor, "Data::HashMap::Shared::I32S::cursor");
950 20           REGISTER_KW(i32s, cursor_next, "Data::HashMap::Shared::I32S::Cursor::next");
951 20           REGISTER_KW(i32s, cursor_reset, "Data::HashMap::Shared::I32S::Cursor::reset");
952 20           REGISTER_KW(i32s, cursor_seek, "Data::HashMap::Shared::I32S::Cursor::seek");
953 20           REGISTER_KW(i32s, ttl_remaining, "Data::HashMap::Shared::I32S::ttl_remaining");
954 20           REGISTER_KW(i32s, capacity, "Data::HashMap::Shared::I32S::capacity");
955 20           REGISTER_KW(i32s, tombstones, "Data::HashMap::Shared::I32S::tombstones");
956 20           REGISTER_KW(i32s, take, "Data::HashMap::Shared::I32S::take");
957 20           REGISTER_KW(i32s, pop, "Data::HashMap::Shared::I32S::pop");
958 20           REGISTER_KW(i32s, shift, "Data::HashMap::Shared::I32S::shift");
959 20           REGISTER_KW(i32s, drain, "Data::HashMap::Shared::I32S::drain");
960 20           REGISTER_KW(i32s, flush_expired, "Data::HashMap::Shared::I32S::flush_expired");
961 20           REGISTER_KW(i32s, flush_expired_partial, "Data::HashMap::Shared::I32S::flush_expired_partial");
962 20           REGISTER_KW(i32s, mmap_size, "Data::HashMap::Shared::I32S::mmap_size");
963 20           REGISTER_KW(i32s, touch, "Data::HashMap::Shared::I32S::touch");
964 20           REGISTER_KW(i32s, reserve, "Data::HashMap::Shared::I32S::reserve");
965 20           REGISTER_KW(i32s, stat_evictions, "Data::HashMap::Shared::I32S::stat_evictions");
966 20           REGISTER_KW(i32s, stat_expired, "Data::HashMap::Shared::I32S::stat_expired");
967 20           REGISTER_KW(i32s, stat_recoveries, "Data::HashMap::Shared::I32S::stat_recoveries");
968 20           REGISTER_KW(i32s, arena_used, "Data::HashMap::Shared::I32S::arena_used");
969 20           REGISTER_KW(i32s, arena_cap, "Data::HashMap::Shared::I32S::arena_cap");
970 20           REGISTER_KW(i32s, add, "Data::HashMap::Shared::I32S::add");
971 20           REGISTER_KW(i32s, add_ttl, "Data::HashMap::Shared::I32S::add_ttl");
972 20           REGISTER_KW(i32s, update_ttl, "Data::HashMap::Shared::I32S::update_ttl");
973 20           REGISTER_KW(i32s, update, "Data::HashMap::Shared::I32S::update");
974 20           REGISTER_KW(i32s, swap, "Data::HashMap::Shared::I32S::swap");
975 20           REGISTER_KW(i32s, cas, "Data::HashMap::Shared::I32S::cas");
976 20           REGISTER_KW(i32s, cas_take, "Data::HashMap::Shared::I32S::cas_take");
977 20           REGISTER_KW(i32s, persist, "Data::HashMap::Shared::I32S::persist");
978 20           REGISTER_KW(i32s, set_ttl, "Data::HashMap::Shared::I32S::set_ttl");
979 20           REGISTER_KW(is, put, "Data::HashMap::Shared::IS::put");
980 20           REGISTER_KW(is, get, "Data::HashMap::Shared::IS::get");
981 20           REGISTER_KW(is, remove, "Data::HashMap::Shared::IS::remove");
982 20           REGISTER_KW(is, exists, "Data::HashMap::Shared::IS::exists");
983 20           REGISTER_KW(is, size, "Data::HashMap::Shared::IS::size");
984 20           REGISTER_KW(is, keys, "Data::HashMap::Shared::IS::keys");
985 20           REGISTER_KW(is, values, "Data::HashMap::Shared::IS::values");
986 20           REGISTER_KW(is, items, "Data::HashMap::Shared::IS::items");
987 20           REGISTER_KW(is, each, "Data::HashMap::Shared::IS::each");
988 20           REGISTER_KW(is, iter_reset, "Data::HashMap::Shared::IS::iter_reset");
989 20           REGISTER_KW(is, clear, "Data::HashMap::Shared::IS::clear");
990 20           REGISTER_KW(is, to_hash, "Data::HashMap::Shared::IS::to_hash");
991 20           REGISTER_KW(is, max_entries, "Data::HashMap::Shared::IS::max_entries");
992 20           REGISTER_KW(is, get_or_set, "Data::HashMap::Shared::IS::get_or_set");
993 20           REGISTER_KW(is, put_ttl, "Data::HashMap::Shared::IS::put_ttl");
994 20           REGISTER_KW(is, max_size, "Data::HashMap::Shared::IS::max_size");
995 20           REGISTER_KW(is, ttl, "Data::HashMap::Shared::IS::ttl");
996 20           REGISTER_KW(is, cursor, "Data::HashMap::Shared::IS::cursor");
997 20           REGISTER_KW(is, cursor_next, "Data::HashMap::Shared::IS::Cursor::next");
998 20           REGISTER_KW(is, cursor_reset, "Data::HashMap::Shared::IS::Cursor::reset");
999 20           REGISTER_KW(is, cursor_seek, "Data::HashMap::Shared::IS::Cursor::seek");
1000 20           REGISTER_KW(is, ttl_remaining, "Data::HashMap::Shared::IS::ttl_remaining");
1001 20           REGISTER_KW(is, capacity, "Data::HashMap::Shared::IS::capacity");
1002 20           REGISTER_KW(is, tombstones, "Data::HashMap::Shared::IS::tombstones");
1003 20           REGISTER_KW(is, take, "Data::HashMap::Shared::IS::take");
1004 20           REGISTER_KW(is, pop, "Data::HashMap::Shared::IS::pop");
1005 20           REGISTER_KW(is, shift, "Data::HashMap::Shared::IS::shift");
1006 20           REGISTER_KW(is, drain, "Data::HashMap::Shared::IS::drain");
1007 20           REGISTER_KW(is, flush_expired, "Data::HashMap::Shared::IS::flush_expired");
1008 20           REGISTER_KW(is, flush_expired_partial, "Data::HashMap::Shared::IS::flush_expired_partial");
1009 20           REGISTER_KW(is, mmap_size, "Data::HashMap::Shared::IS::mmap_size");
1010 20           REGISTER_KW(is, touch, "Data::HashMap::Shared::IS::touch");
1011 20           REGISTER_KW(is, reserve, "Data::HashMap::Shared::IS::reserve");
1012 20           REGISTER_KW(is, stat_evictions, "Data::HashMap::Shared::IS::stat_evictions");
1013 20           REGISTER_KW(is, stat_expired, "Data::HashMap::Shared::IS::stat_expired");
1014 20           REGISTER_KW(is, stat_recoveries, "Data::HashMap::Shared::IS::stat_recoveries");
1015 20           REGISTER_KW(is, arena_used, "Data::HashMap::Shared::IS::arena_used");
1016 20           REGISTER_KW(is, arena_cap, "Data::HashMap::Shared::IS::arena_cap");
1017 20           REGISTER_KW(is, add, "Data::HashMap::Shared::IS::add");
1018 20           REGISTER_KW(is, add_ttl, "Data::HashMap::Shared::IS::add_ttl");
1019 20           REGISTER_KW(is, update_ttl, "Data::HashMap::Shared::IS::update_ttl");
1020 20           REGISTER_KW(is, update, "Data::HashMap::Shared::IS::update");
1021 20           REGISTER_KW(is, swap, "Data::HashMap::Shared::IS::swap");
1022 20           REGISTER_KW(is, cas, "Data::HashMap::Shared::IS::cas");
1023 20           REGISTER_KW(is, cas_take, "Data::HashMap::Shared::IS::cas_take");
1024 20           REGISTER_KW(is, persist, "Data::HashMap::Shared::IS::persist");
1025 20           REGISTER_KW(is, set_ttl, "Data::HashMap::Shared::IS::set_ttl");
1026 20           REGISTER_KW(si16, put, "Data::HashMap::Shared::SI16::put");
1027 20           REGISTER_KW(si16, get, "Data::HashMap::Shared::SI16::get");
1028 20           REGISTER_KW(si16, remove, "Data::HashMap::Shared::SI16::remove");
1029 20           REGISTER_KW(si16, exists, "Data::HashMap::Shared::SI16::exists");
1030 20           REGISTER_KW(si16, incr, "Data::HashMap::Shared::SI16::incr");
1031 20           REGISTER_KW(si16, decr, "Data::HashMap::Shared::SI16::decr");
1032 20           REGISTER_KW(si16, incr_by, "Data::HashMap::Shared::SI16::incr_by");
1033 20           REGISTER_KW(si16, max, "Data::HashMap::Shared::SI16::max");
1034 20           REGISTER_KW(si16, min, "Data::HashMap::Shared::SI16::min");
1035 20           REGISTER_KW(si16, size, "Data::HashMap::Shared::SI16::size");
1036 20           REGISTER_KW(si16, keys, "Data::HashMap::Shared::SI16::keys");
1037 20           REGISTER_KW(si16, values, "Data::HashMap::Shared::SI16::values");
1038 20           REGISTER_KW(si16, items, "Data::HashMap::Shared::SI16::items");
1039 20           REGISTER_KW(si16, each, "Data::HashMap::Shared::SI16::each");
1040 20           REGISTER_KW(si16, iter_reset, "Data::HashMap::Shared::SI16::iter_reset");
1041 20           REGISTER_KW(si16, clear, "Data::HashMap::Shared::SI16::clear");
1042 20           REGISTER_KW(si16, to_hash, "Data::HashMap::Shared::SI16::to_hash");
1043 20           REGISTER_KW(si16, max_entries, "Data::HashMap::Shared::SI16::max_entries");
1044 20           REGISTER_KW(si16, get_or_set, "Data::HashMap::Shared::SI16::get_or_set");
1045 20           REGISTER_KW(si16, put_ttl, "Data::HashMap::Shared::SI16::put_ttl");
1046 20           REGISTER_KW(si16, max_size, "Data::HashMap::Shared::SI16::max_size");
1047 20           REGISTER_KW(si16, ttl, "Data::HashMap::Shared::SI16::ttl");
1048 20           REGISTER_KW(si16, cursor, "Data::HashMap::Shared::SI16::cursor");
1049 20           REGISTER_KW(si16, cursor_next, "Data::HashMap::Shared::SI16::Cursor::next");
1050 20           REGISTER_KW(si16, cursor_reset, "Data::HashMap::Shared::SI16::Cursor::reset");
1051 20           REGISTER_KW(si16, cursor_seek, "Data::HashMap::Shared::SI16::Cursor::seek");
1052 20           REGISTER_KW(si16, ttl_remaining, "Data::HashMap::Shared::SI16::ttl_remaining");
1053 20           REGISTER_KW(si16, capacity, "Data::HashMap::Shared::SI16::capacity");
1054 20           REGISTER_KW(si16, tombstones, "Data::HashMap::Shared::SI16::tombstones");
1055 20           REGISTER_KW(si16, take, "Data::HashMap::Shared::SI16::take");
1056 20           REGISTER_KW(si16, pop, "Data::HashMap::Shared::SI16::pop");
1057 20           REGISTER_KW(si16, shift, "Data::HashMap::Shared::SI16::shift");
1058 20           REGISTER_KW(si16, drain, "Data::HashMap::Shared::SI16::drain");
1059 20           REGISTER_KW(si16, flush_expired, "Data::HashMap::Shared::SI16::flush_expired");
1060 20           REGISTER_KW(si16, flush_expired_partial, "Data::HashMap::Shared::SI16::flush_expired_partial");
1061 20           REGISTER_KW(si16, mmap_size, "Data::HashMap::Shared::SI16::mmap_size");
1062 20           REGISTER_KW(si16, touch, "Data::HashMap::Shared::SI16::touch");
1063 20           REGISTER_KW(si16, reserve, "Data::HashMap::Shared::SI16::reserve");
1064 20           REGISTER_KW(si16, stat_evictions, "Data::HashMap::Shared::SI16::stat_evictions");
1065 20           REGISTER_KW(si16, stat_expired, "Data::HashMap::Shared::SI16::stat_expired");
1066 20           REGISTER_KW(si16, stat_recoveries, "Data::HashMap::Shared::SI16::stat_recoveries");
1067 20           REGISTER_KW(si16, arena_used, "Data::HashMap::Shared::SI16::arena_used");
1068 20           REGISTER_KW(si16, arena_cap, "Data::HashMap::Shared::SI16::arena_cap");
1069 20           REGISTER_KW(si16, add, "Data::HashMap::Shared::SI16::add");
1070 20           REGISTER_KW(si16, add_ttl, "Data::HashMap::Shared::SI16::add_ttl");
1071 20           REGISTER_KW(si16, update_ttl, "Data::HashMap::Shared::SI16::update_ttl");
1072 20           REGISTER_KW(si16, update, "Data::HashMap::Shared::SI16::update");
1073 20           REGISTER_KW(si16, swap, "Data::HashMap::Shared::SI16::swap");
1074 20           REGISTER_KW(si16, cas, "Data::HashMap::Shared::SI16::cas");
1075 20           REGISTER_KW(si16, cas_take, "Data::HashMap::Shared::SI16::cas_take");
1076 20           REGISTER_KW(si16, persist, "Data::HashMap::Shared::SI16::persist");
1077 20           REGISTER_KW(si16, set_ttl, "Data::HashMap::Shared::SI16::set_ttl");
1078 20           REGISTER_KW(si32, put, "Data::HashMap::Shared::SI32::put");
1079 20           REGISTER_KW(si32, get, "Data::HashMap::Shared::SI32::get");
1080 20           REGISTER_KW(si32, remove, "Data::HashMap::Shared::SI32::remove");
1081 20           REGISTER_KW(si32, exists, "Data::HashMap::Shared::SI32::exists");
1082 20           REGISTER_KW(si32, incr, "Data::HashMap::Shared::SI32::incr");
1083 20           REGISTER_KW(si32, decr, "Data::HashMap::Shared::SI32::decr");
1084 20           REGISTER_KW(si32, incr_by, "Data::HashMap::Shared::SI32::incr_by");
1085 20           REGISTER_KW(si32, max, "Data::HashMap::Shared::SI32::max");
1086 20           REGISTER_KW(si32, min, "Data::HashMap::Shared::SI32::min");
1087 20           REGISTER_KW(si32, size, "Data::HashMap::Shared::SI32::size");
1088 20           REGISTER_KW(si32, keys, "Data::HashMap::Shared::SI32::keys");
1089 20           REGISTER_KW(si32, values, "Data::HashMap::Shared::SI32::values");
1090 20           REGISTER_KW(si32, items, "Data::HashMap::Shared::SI32::items");
1091 20           REGISTER_KW(si32, each, "Data::HashMap::Shared::SI32::each");
1092 20           REGISTER_KW(si32, iter_reset, "Data::HashMap::Shared::SI32::iter_reset");
1093 20           REGISTER_KW(si32, clear, "Data::HashMap::Shared::SI32::clear");
1094 20           REGISTER_KW(si32, to_hash, "Data::HashMap::Shared::SI32::to_hash");
1095 20           REGISTER_KW(si32, max_entries, "Data::HashMap::Shared::SI32::max_entries");
1096 20           REGISTER_KW(si32, get_or_set, "Data::HashMap::Shared::SI32::get_or_set");
1097 20           REGISTER_KW(si32, put_ttl, "Data::HashMap::Shared::SI32::put_ttl");
1098 20           REGISTER_KW(si32, max_size, "Data::HashMap::Shared::SI32::max_size");
1099 20           REGISTER_KW(si32, ttl, "Data::HashMap::Shared::SI32::ttl");
1100 20           REGISTER_KW(si32, cursor, "Data::HashMap::Shared::SI32::cursor");
1101 20           REGISTER_KW(si32, cursor_next, "Data::HashMap::Shared::SI32::Cursor::next");
1102 20           REGISTER_KW(si32, cursor_reset, "Data::HashMap::Shared::SI32::Cursor::reset");
1103 20           REGISTER_KW(si32, cursor_seek, "Data::HashMap::Shared::SI32::Cursor::seek");
1104 20           REGISTER_KW(si32, ttl_remaining, "Data::HashMap::Shared::SI32::ttl_remaining");
1105 20           REGISTER_KW(si32, capacity, "Data::HashMap::Shared::SI32::capacity");
1106 20           REGISTER_KW(si32, tombstones, "Data::HashMap::Shared::SI32::tombstones");
1107 20           REGISTER_KW(si32, take, "Data::HashMap::Shared::SI32::take");
1108 20           REGISTER_KW(si32, pop, "Data::HashMap::Shared::SI32::pop");
1109 20           REGISTER_KW(si32, shift, "Data::HashMap::Shared::SI32::shift");
1110 20           REGISTER_KW(si32, drain, "Data::HashMap::Shared::SI32::drain");
1111 20           REGISTER_KW(si32, flush_expired, "Data::HashMap::Shared::SI32::flush_expired");
1112 20           REGISTER_KW(si32, flush_expired_partial, "Data::HashMap::Shared::SI32::flush_expired_partial");
1113 20           REGISTER_KW(si32, mmap_size, "Data::HashMap::Shared::SI32::mmap_size");
1114 20           REGISTER_KW(si32, touch, "Data::HashMap::Shared::SI32::touch");
1115 20           REGISTER_KW(si32, reserve, "Data::HashMap::Shared::SI32::reserve");
1116 20           REGISTER_KW(si32, stat_evictions, "Data::HashMap::Shared::SI32::stat_evictions");
1117 20           REGISTER_KW(si32, stat_expired, "Data::HashMap::Shared::SI32::stat_expired");
1118 20           REGISTER_KW(si32, stat_recoveries, "Data::HashMap::Shared::SI32::stat_recoveries");
1119 20           REGISTER_KW(si32, arena_used, "Data::HashMap::Shared::SI32::arena_used");
1120 20           REGISTER_KW(si32, arena_cap, "Data::HashMap::Shared::SI32::arena_cap");
1121 20           REGISTER_KW(si32, add, "Data::HashMap::Shared::SI32::add");
1122 20           REGISTER_KW(si32, add_ttl, "Data::HashMap::Shared::SI32::add_ttl");
1123 20           REGISTER_KW(si32, update_ttl, "Data::HashMap::Shared::SI32::update_ttl");
1124 20           REGISTER_KW(si32, update, "Data::HashMap::Shared::SI32::update");
1125 20           REGISTER_KW(si32, swap, "Data::HashMap::Shared::SI32::swap");
1126 20           REGISTER_KW(si32, cas, "Data::HashMap::Shared::SI32::cas");
1127 20           REGISTER_KW(si32, cas_take, "Data::HashMap::Shared::SI32::cas_take");
1128 20           REGISTER_KW(si32, persist, "Data::HashMap::Shared::SI32::persist");
1129 20           REGISTER_KW(si32, set_ttl, "Data::HashMap::Shared::SI32::set_ttl");
1130 20           REGISTER_KW(si, put, "Data::HashMap::Shared::SI::put");
1131 20           REGISTER_KW(si, get, "Data::HashMap::Shared::SI::get");
1132 20           REGISTER_KW(si, remove, "Data::HashMap::Shared::SI::remove");
1133 20           REGISTER_KW(si, exists, "Data::HashMap::Shared::SI::exists");
1134 20           REGISTER_KW(si, incr, "Data::HashMap::Shared::SI::incr");
1135 20           REGISTER_KW(si, decr, "Data::HashMap::Shared::SI::decr");
1136 20           REGISTER_KW(si, incr_by, "Data::HashMap::Shared::SI::incr_by");
1137 20           REGISTER_KW(si, max, "Data::HashMap::Shared::SI::max");
1138 20           REGISTER_KW(si, min, "Data::HashMap::Shared::SI::min");
1139 20           REGISTER_KW(si, size, "Data::HashMap::Shared::SI::size");
1140 20           REGISTER_KW(si, keys, "Data::HashMap::Shared::SI::keys");
1141 20           REGISTER_KW(si, values, "Data::HashMap::Shared::SI::values");
1142 20           REGISTER_KW(si, items, "Data::HashMap::Shared::SI::items");
1143 20           REGISTER_KW(si, each, "Data::HashMap::Shared::SI::each");
1144 20           REGISTER_KW(si, iter_reset, "Data::HashMap::Shared::SI::iter_reset");
1145 20           REGISTER_KW(si, clear, "Data::HashMap::Shared::SI::clear");
1146 20           REGISTER_KW(si, to_hash, "Data::HashMap::Shared::SI::to_hash");
1147 20           REGISTER_KW(si, max_entries, "Data::HashMap::Shared::SI::max_entries");
1148 20           REGISTER_KW(si, get_or_set, "Data::HashMap::Shared::SI::get_or_set");
1149 20           REGISTER_KW(si, put_ttl, "Data::HashMap::Shared::SI::put_ttl");
1150 20           REGISTER_KW(si, max_size, "Data::HashMap::Shared::SI::max_size");
1151 20           REGISTER_KW(si, ttl, "Data::HashMap::Shared::SI::ttl");
1152 20           REGISTER_KW(si, cursor, "Data::HashMap::Shared::SI::cursor");
1153 20           REGISTER_KW(si, cursor_next, "Data::HashMap::Shared::SI::Cursor::next");
1154 20           REGISTER_KW(si, cursor_reset, "Data::HashMap::Shared::SI::Cursor::reset");
1155 20           REGISTER_KW(si, cursor_seek, "Data::HashMap::Shared::SI::Cursor::seek");
1156 20           REGISTER_KW(si, ttl_remaining, "Data::HashMap::Shared::SI::ttl_remaining");
1157 20           REGISTER_KW(si, capacity, "Data::HashMap::Shared::SI::capacity");
1158 20           REGISTER_KW(si, tombstones, "Data::HashMap::Shared::SI::tombstones");
1159 20           REGISTER_KW(si, take, "Data::HashMap::Shared::SI::take");
1160 20           REGISTER_KW(si, pop, "Data::HashMap::Shared::SI::pop");
1161 20           REGISTER_KW(si, shift, "Data::HashMap::Shared::SI::shift");
1162 20           REGISTER_KW(si, drain, "Data::HashMap::Shared::SI::drain");
1163 20           REGISTER_KW(si, flush_expired, "Data::HashMap::Shared::SI::flush_expired");
1164 20           REGISTER_KW(si, flush_expired_partial, "Data::HashMap::Shared::SI::flush_expired_partial");
1165 20           REGISTER_KW(si, mmap_size, "Data::HashMap::Shared::SI::mmap_size");
1166 20           REGISTER_KW(si, touch, "Data::HashMap::Shared::SI::touch");
1167 20           REGISTER_KW(si, reserve, "Data::HashMap::Shared::SI::reserve");
1168 20           REGISTER_KW(si, stat_evictions, "Data::HashMap::Shared::SI::stat_evictions");
1169 20           REGISTER_KW(si, stat_expired, "Data::HashMap::Shared::SI::stat_expired");
1170 20           REGISTER_KW(si, stat_recoveries, "Data::HashMap::Shared::SI::stat_recoveries");
1171 20           REGISTER_KW(si, arena_used, "Data::HashMap::Shared::SI::arena_used");
1172 20           REGISTER_KW(si, arena_cap, "Data::HashMap::Shared::SI::arena_cap");
1173 20           REGISTER_KW(si, add, "Data::HashMap::Shared::SI::add");
1174 20           REGISTER_KW(si, add_ttl, "Data::HashMap::Shared::SI::add_ttl");
1175 20           REGISTER_KW(si, update_ttl, "Data::HashMap::Shared::SI::update_ttl");
1176 20           REGISTER_KW(si, update, "Data::HashMap::Shared::SI::update");
1177 20           REGISTER_KW(si, swap, "Data::HashMap::Shared::SI::swap");
1178 20           REGISTER_KW(si, cas, "Data::HashMap::Shared::SI::cas");
1179 20           REGISTER_KW(si, cas_take, "Data::HashMap::Shared::SI::cas_take");
1180 20           REGISTER_KW(si, persist, "Data::HashMap::Shared::SI::persist");
1181 20           REGISTER_KW(si, set_ttl, "Data::HashMap::Shared::SI::set_ttl");
1182 20           REGISTER_KW(ss, put, "Data::HashMap::Shared::SS::put");
1183 20           REGISTER_KW(ss, get, "Data::HashMap::Shared::SS::get");
1184 20           REGISTER_KW(ss, remove, "Data::HashMap::Shared::SS::remove");
1185 20           REGISTER_KW(ss, exists, "Data::HashMap::Shared::SS::exists");
1186 20           REGISTER_KW(ss, size, "Data::HashMap::Shared::SS::size");
1187 20           REGISTER_KW(ss, keys, "Data::HashMap::Shared::SS::keys");
1188 20           REGISTER_KW(ss, values, "Data::HashMap::Shared::SS::values");
1189 20           REGISTER_KW(ss, items, "Data::HashMap::Shared::SS::items");
1190 20           REGISTER_KW(ss, each, "Data::HashMap::Shared::SS::each");
1191 20           REGISTER_KW(ss, iter_reset, "Data::HashMap::Shared::SS::iter_reset");
1192 20           REGISTER_KW(ss, clear, "Data::HashMap::Shared::SS::clear");
1193 20           REGISTER_KW(ss, to_hash, "Data::HashMap::Shared::SS::to_hash");
1194 20           REGISTER_KW(ss, max_entries, "Data::HashMap::Shared::SS::max_entries");
1195 20           REGISTER_KW(ss, get_or_set, "Data::HashMap::Shared::SS::get_or_set");
1196 20           REGISTER_KW(ss, put_ttl, "Data::HashMap::Shared::SS::put_ttl");
1197 20           REGISTER_KW(ss, max_size, "Data::HashMap::Shared::SS::max_size");
1198 20           REGISTER_KW(ss, ttl, "Data::HashMap::Shared::SS::ttl");
1199 20           REGISTER_KW(ss, cursor, "Data::HashMap::Shared::SS::cursor");
1200 20           REGISTER_KW(ss, cursor_next, "Data::HashMap::Shared::SS::Cursor::next");
1201 20           REGISTER_KW(ss, cursor_reset, "Data::HashMap::Shared::SS::Cursor::reset");
1202 20           REGISTER_KW(ss, cursor_seek, "Data::HashMap::Shared::SS::Cursor::seek");
1203 20           REGISTER_KW(ss, ttl_remaining, "Data::HashMap::Shared::SS::ttl_remaining");
1204 20           REGISTER_KW(ss, capacity, "Data::HashMap::Shared::SS::capacity");
1205 20           REGISTER_KW(ss, tombstones, "Data::HashMap::Shared::SS::tombstones");
1206 20           REGISTER_KW(ss, take, "Data::HashMap::Shared::SS::take");
1207 20           REGISTER_KW(ss, pop, "Data::HashMap::Shared::SS::pop");
1208 20           REGISTER_KW(ss, shift, "Data::HashMap::Shared::SS::shift");
1209 20           REGISTER_KW(ss, drain, "Data::HashMap::Shared::SS::drain");
1210 20           REGISTER_KW(ss, flush_expired, "Data::HashMap::Shared::SS::flush_expired");
1211 20           REGISTER_KW(ss, flush_expired_partial, "Data::HashMap::Shared::SS::flush_expired_partial");
1212 20           REGISTER_KW(ss, mmap_size, "Data::HashMap::Shared::SS::mmap_size");
1213 20           REGISTER_KW(ss, touch, "Data::HashMap::Shared::SS::touch");
1214 20           REGISTER_KW(ss, reserve, "Data::HashMap::Shared::SS::reserve");
1215 20           REGISTER_KW(ss, stat_evictions, "Data::HashMap::Shared::SS::stat_evictions");
1216 20           REGISTER_KW(ss, stat_expired, "Data::HashMap::Shared::SS::stat_expired");
1217 20           REGISTER_KW(ss, stat_recoveries, "Data::HashMap::Shared::SS::stat_recoveries");
1218 20           REGISTER_KW(ss, arena_used, "Data::HashMap::Shared::SS::arena_used");
1219 20           REGISTER_KW(ss, arena_cap, "Data::HashMap::Shared::SS::arena_cap");
1220 20           REGISTER_KW(ss, add, "Data::HashMap::Shared::SS::add");
1221 20           REGISTER_KW(ss, add_ttl, "Data::HashMap::Shared::SS::add_ttl");
1222 20           REGISTER_KW(ss, update_ttl, "Data::HashMap::Shared::SS::update_ttl");
1223 20           REGISTER_KW(ss, update, "Data::HashMap::Shared::SS::update");
1224 20           REGISTER_KW(ss, swap, "Data::HashMap::Shared::SS::swap");
1225 20           REGISTER_KW(ss, cas, "Data::HashMap::Shared::SS::cas");
1226 20           REGISTER_KW(ss, cas_take, "Data::HashMap::Shared::SS::cas_take");
1227 20           REGISTER_KW(ss, persist, "Data::HashMap::Shared::SS::persist");
1228 20           REGISTER_KW(ss, set_ttl, "Data::HashMap::Shared::SS::set_ttl");
1229              
1230              
1231             INCLUDE: xs/i16.xs
1232             INCLUDE: xs/i32.xs
1233             INCLUDE: xs/ii.xs
1234             INCLUDE: xs/i16s.xs
1235             INCLUDE: xs/i32s.xs
1236             INCLUDE: xs/is.xs
1237             INCLUDE: xs/si16.xs
1238             INCLUDE: xs/si32.xs
1239             INCLUDE: xs/si.xs
1240             INCLUDE: xs/ss.xs