67 _AS_EXP_CODE_UNKNOWN = 0,
69 _AS_EXP_CODE_CMP_EQ = 1,
70 _AS_EXP_CODE_CMP_NE = 2,
71 _AS_EXP_CODE_CMP_GT = 3,
72 _AS_EXP_CODE_CMP_GE = 4,
73 _AS_EXP_CODE_CMP_LT = 5,
74 _AS_EXP_CODE_CMP_LE = 6,
76 _AS_EXP_CODE_CMP_REGEX = 7,
77 _AS_EXP_CODE_CMP_GEO = 8,
79 _AS_EXP_CODE_AND = 16,
81 _AS_EXP_CODE_NOT = 18,
82 _AS_EXP_CODE_EXCLUSIVE = 19,
84 _AS_EXP_CODE_ADD = 20,
85 _AS_EXP_CODE_SUB = 21,
86 _AS_EXP_CODE_MUL = 22,
87 _AS_EXP_CODE_DIV = 23,
88 _AS_EXP_CODE_POW = 24,
89 _AS_EXP_CODE_LOG = 25,
90 _AS_EXP_CODE_MOD = 26,
91 _AS_EXP_CODE_ABS = 27,
92 _AS_EXP_CODE_FLOOR = 28,
93 _AS_EXP_CODE_CEIL = 29,
95 _AS_EXP_CODE_TO_INT = 30,
96 _AS_EXP_CODE_TO_FLOAT = 31,
98 _AS_EXP_CODE_INT_AND = 32,
99 _AS_EXP_CODE_INT_OR = 33,
100 _AS_EXP_CODE_INT_XOR = 34,
101 _AS_EXP_CODE_INT_NOT = 35,
102 _AS_EXP_CODE_INT_LSHIFT = 36,
103 _AS_EXP_CODE_INT_RSHIFT = 37,
104 _AS_EXP_CODE_INT_ARSHIFT = 38,
105 _AS_EXP_CODE_INT_COUNT = 39,
106 _AS_EXP_CODE_INT_LSCAN = 40,
107 _AS_EXP_CODE_INT_RSCAN = 41,
109 _AS_EXP_CODE_MIN = 50,
110 _AS_EXP_CODE_MAX = 51,
112 _AS_EXP_CODE_DIGEST_MODULO = 64,
113 _AS_EXP_CODE_DEVICE_SIZE = 65,
114 _AS_EXP_CODE_LAST_UPDATE = 66,
115 _AS_EXP_CODE_SINCE_UPDATE = 67,
116 _AS_EXP_CODE_VOID_TIME = 68,
117 _AS_EXP_CODE_TTL = 69,
118 _AS_EXP_CODE_SET_NAME = 70,
119 _AS_EXP_CODE_KEY_EXIST = 71,
120 _AS_EXP_CODE_IS_TOMBSTONE = 72,
121 _AS_EXP_CODE_MEMORY_SIZE = 73,
122 _AS_EXP_CODE_RECORD_SIZE = 74,
124 _AS_EXP_CODE_KEY = 80,
125 _AS_EXP_CODE_BIN = 81,
126 _AS_EXP_CODE_BIN_TYPE = 82,
128 _AS_EXP_CODE_COND = 123,
129 _AS_EXP_CODE_VAR = 124,
130 _AS_EXP_CODE_LET = 125,
131 _AS_EXP_CODE_QUOTE = 126,
132 _AS_EXP_CODE_CALL = 127,
136 _AS_EXP_CODE_VAL_GEO,
138 _AS_EXP_CODE_VAL_INT,
139 _AS_EXP_CODE_VAL_UINT,
140 _AS_EXP_CODE_VAL_FLOAT,
141 _AS_EXP_CODE_VAL_BOOL,
142 _AS_EXP_CODE_VAL_STR,
143 _AS_EXP_CODE_VAL_BYTES,
144 _AS_EXP_CODE_VAL_RAWSTR,
145 _AS_EXP_CODE_VAL_RTYPE,
147 _AS_EXP_CODE_CALL_VOP_START,
148 _AS_EXP_CODE_CDT_LIST_CRMOD,
149 _AS_EXP_CODE_CDT_LIST_MOD,
150 _AS_EXP_CODE_CDT_MAP_CRMOD,
151 _AS_EXP_CODE_CDT_MAP_CR,
152 _AS_EXP_CODE_CDT_MAP_MOD,
155 _AS_EXP_CODE_END_OF_VA_ARGS
159 _AS_EXP_SYS_CALL_CDT = 0,
160 _AS_EXP_SYS_CALL_BITS = 1,
161 _AS_EXP_SYS_CALL_HLL = 2,
163 _AS_EXP_SYS_FLAG_MODIFY_LOCAL = 0x40
288 #define as_exp_unknown() {.op=_AS_EXP_CODE_UNKNOWN, .count=1}
296 #define as_exp_bool(__val) {.op=_AS_EXP_CODE_VAL_BOOL, .v.bool_val=__val}
304 #define as_exp_int(__val) {.op=_AS_EXP_CODE_VAL_INT, .v.int_val=__val}
312 #define as_exp_uint(__val) {.op=_AS_EXP_CODE_VAL_UINT, .v.uint_val=__val}
320 #define as_exp_float(__val) {.op=_AS_EXP_CODE_VAL_FLOAT, .v.float_val=__val}
328 #define as_exp_str(__val) {.op=_AS_EXP_CODE_VAL_STR, .v.str_val=__val}
337 #define as_exp_bytes(__val, __size) {.op=_AS_EXP_CODE_VAL_BYTES, .sz=__size, .v.bytes_val=__val}
345 #define as_exp_geo(__val) {.op=_AS_EXP_CODE_VAL_GEO, .v.val=(as_val*)as_geojson_new(__val, false)}
353 #define as_exp_val(__val) {.op=_AS_EXP_CODE_AS_VAL, .v.val=(as_val*)(__val)}
359 #define as_exp_nil() as_exp_val(&as_nil)
365 #define as_exp_inf() as_exp_val(&as_cmp_inf)
371 #define as_exp_wildcard() as_exp_val(&as_cmp_wildcard)
390 #define as_exp_key_int() {.op=_AS_EXP_CODE_KEY, .count=2}, \
391 as_exp_int(AS_EXP_TYPE_INT)
406 #define as_exp_key_str() {.op=_AS_EXP_CODE_KEY, .count=2}, \
407 as_exp_int(AS_EXP_TYPE_STR)
423 #define as_exp_key_blob() {.op=_AS_EXP_CODE_KEY, .count=2}, \
424 as_exp_int(AS_EXP_TYPE_BLOB)
439 #define as_exp_key_exist() {.op=_AS_EXP_CODE_KEY_EXIST, .count=1}
445 #define _AS_EXP_VAL_RAWSTR(__val) {.op=_AS_EXP_CODE_VAL_RAWSTR, .v.str_val=__val}
460 #define as_exp_bin_bool(__bin_name) \
461 {.op=_AS_EXP_CODE_BIN, .count=3}, \
462 as_exp_int(AS_EXP_TYPE_BOOL), \
463 _AS_EXP_VAL_RAWSTR(__bin_name)
479 #define as_exp_bin_int(__bin_name) \
480 {.op=_AS_EXP_CODE_BIN, .count=3}, \
481 as_exp_int(AS_EXP_TYPE_INT), \
482 _AS_EXP_VAL_RAWSTR(__bin_name)
498 #define as_exp_bin_float(__bin_name) \
499 {.op=_AS_EXP_CODE_BIN, .count=3}, \
500 as_exp_int(AS_EXP_TYPE_FLOAT), \
501 _AS_EXP_VAL_RAWSTR(__bin_name)
517 #define as_exp_bin_str(__bin_name) \
518 {.op=_AS_EXP_CODE_BIN, .count=3}, \
519 as_exp_int(AS_EXP_TYPE_STR), \
520 _AS_EXP_VAL_RAWSTR(__bin_name)
537 #define as_exp_bin_blob(__bin_name) \
538 {.op=_AS_EXP_CODE_BIN, .count=3}, \
539 as_exp_int(AS_EXP_TYPE_BLOB), \
540 _AS_EXP_VAL_RAWSTR(__bin_name)
556 #define as_exp_bin_geo(__bin_name) \
557 {.op=_AS_EXP_CODE_BIN, .count=3}, \
558 as_exp_int(AS_EXP_TYPE_GEOJSON), \
559 _AS_EXP_VAL_RAWSTR(__bin_name)
578 #define as_exp_bin_list(__bin_name) \
579 {.op=_AS_EXP_CODE_BIN, .count=3}, \
580 as_exp_int(AS_EXP_TYPE_LIST), \
581 _AS_EXP_VAL_RAWSTR(__bin_name)
598 #define as_exp_bin_map(__bin_name) \
599 {.op=_AS_EXP_CODE_BIN, .count=3}, \
600 as_exp_int(AS_EXP_TYPE_MAP), \
601 _AS_EXP_VAL_RAWSTR(__bin_name)
618 #define as_exp_bin_hll(__bin_name) \
619 {.op=_AS_EXP_CODE_BIN, .count=3}, \
620 as_exp_int(AS_EXP_TYPE_HLL), \
621 _AS_EXP_VAL_RAWSTR(__bin_name)
635 #define as_exp_bin_exists(__bin_name) \
636 as_exp_cmp_ne(as_exp_bin_type(__bin_name), as_exp_int(AS_BYTES_UNDEF))
651 #define as_exp_bin_type(__bin_name) \
652 {.op=_AS_EXP_CODE_BIN_TYPE, .count=2}, \
653 _AS_EXP_VAL_RAWSTR(__bin_name)
672 #define as_exp_set_name() {.op=_AS_EXP_CODE_SET_NAME, .count=1}
690 #define as_exp_record_size() {.op=_AS_EXP_CODE_RECORD_SIZE, .count=1}
709 #define as_exp_device_size() {.op=_AS_EXP_CODE_DEVICE_SIZE, .count=1}
724 #define as_exp_last_update() {.op=_AS_EXP_CODE_LAST_UPDATE, .count=1}
741 #define as_exp_since_update() {.op=_AS_EXP_CODE_SINCE_UPDATE, .count=1}
758 #define as_exp_void_time() {.op=_AS_EXP_CODE_VOID_TIME, .count=1}
774 #define as_exp_ttl() {.op=_AS_EXP_CODE_TTL, .count=1}
791 #define as_exp_is_tombstone() {.op=_AS_EXP_CODE_IS_TOMBSTONE, .count=1}
811 #define as_exp_memory_size() {.op=_AS_EXP_CODE_MEMORY_SIZE, .count=1}
826 #define as_exp_digest_modulo(__mod) \
827 {.op=_AS_EXP_CODE_DIGEST_MODULO, .count=2}, \
847 #define as_exp_cmp_eq(__left, __right) \
848 {.op=_AS_EXP_CODE_CMP_EQ, .count=3}, __left, __right
864 #define as_exp_cmp_ne(__left, __right) \
865 {.op=_AS_EXP_CODE_CMP_NE, .count=3}, __left, __right
880 #define as_exp_cmp_gt(__left, __right) \
881 {.op=_AS_EXP_CODE_CMP_GT, .count=3}, __left, __right
896 #define as_exp_cmp_ge(__left, __right) \
897 {.op=_AS_EXP_CODE_CMP_GE, .count=3}, __left, __right
912 #define as_exp_cmp_lt(__left, __right) \
913 {.op=_AS_EXP_CODE_CMP_LT, .count=3}, __left, __right
928 #define as_exp_cmp_le(__left, __right) \
929 {.op=_AS_EXP_CODE_CMP_LE, .count=3}, __left, __right
948 #define as_exp_cmp_regex(__options, __regex_str, __cmp_str) \
949 {.op=_AS_EXP_CODE_CMP_REGEX, .count=4}, \
950 as_exp_int(__options), _AS_EXP_VAL_RAWSTR(__regex_str), \
967 #define as_exp_cmp_geo(__left, __right) \
968 {.op=_AS_EXP_CODE_CMP_GEO, .count=3}, __left, __right
989 #define as_exp_not(__expr) {.op=_AS_EXP_CODE_NOT, .count=2}, __expr
1008 #define as_exp_and(...) {.op=_AS_EXP_CODE_AND}, __VA_ARGS__, \
1009 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1026 #define as_exp_or(...) {.op=_AS_EXP_CODE_OR}, __VA_ARGS__, \
1027 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1045 #define as_exp_exclusive(...) {.op=_AS_EXP_CODE_EXCLUSIVE}, __VA_ARGS__, \
1046 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1070 #define as_exp_add(...) {.op=_AS_EXP_CODE_ADD}, __VA_ARGS__, \
1071 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1092 #define as_exp_sub(...) {.op=_AS_EXP_CODE_SUB}, __VA_ARGS__, \
1093 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1113 #define as_exp_mul(...) {.op=_AS_EXP_CODE_MUL}, __VA_ARGS__, \
1114 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1135 #define as_exp_div(...) {.op=_AS_EXP_CODE_DIV}, __VA_ARGS__, \
1136 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1156 #define as_exp_pow(__base, __exponent) \
1157 {.op=_AS_EXP_CODE_POW, .count=3}, __base, __exponent
1177 #define as_exp_log(__num, __base) \
1178 {.op=_AS_EXP_CODE_LOG, .count=3}, __num, __base
1196 #define as_exp_mod(__numerator, __denominator) \
1197 {.op=_AS_EXP_CODE_MOD, .count=3}, __numerator, __denominator
1215 #define as_exp_abs(__value) \
1216 {.op=_AS_EXP_CODE_ABS, .count=2}, __value
1234 #define as_exp_floor(__num) \
1235 {.op=_AS_EXP_CODE_FLOOR, .count=2}, __num
1253 #define as_exp_ceil(__num) \
1254 {.op=_AS_EXP_CODE_CEIL, .count=2}, __num
1272 #define as_exp_to_int(__num) \
1273 {.op=_AS_EXP_CODE_TO_INT, .count=2}, __num
1291 #define as_exp_to_float(__num) \
1292 {.op=_AS_EXP_CODE_TO_FLOAT, .count=2}, __num
1311 #define as_exp_int_and(...) {.op=_AS_EXP_CODE_INT_AND}, __VA_ARGS__, \
1312 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1331 #define as_exp_int_or(...) {.op=_AS_EXP_CODE_INT_OR}, __VA_ARGS__, \
1332 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1351 #define as_exp_int_xor(...) {.op=_AS_EXP_CODE_INT_XOR}, __VA_ARGS__, \
1352 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1370 #define as_exp_int_not(__expr) {.op=_AS_EXP_CODE_INT_NOT, .count=2}, \
1390 #define as_exp_int_lshift(__value, __shift) \
1391 {.op=_AS_EXP_CODE_INT_LSHIFT, .count=3}, __value, __shift
1410 #define as_exp_int_rshift(__value, __shift) \
1411 {.op=_AS_EXP_CODE_INT_RSHIFT, .count=3}, __value, __shift
1430 #define as_exp_int_arshift(__value, __shift) \
1431 {.op=_AS_EXP_CODE_INT_ARSHIFT, .count=3}, __value, __shift
1448 #define as_exp_int_count(__expr) \
1449 {.op=_AS_EXP_CODE_INT_COUNT, .count=2}, __expr
1470 #define as_exp_int_lscan(__value, __search) \
1471 {.op=_AS_EXP_CODE_INT_LSCAN, .count=3}, __value, __search
1492 #define as_exp_int_rscan(__value, __search) \
1493 {.op=_AS_EXP_CODE_INT_RSCAN, .count=3}, __value, __search
1512 #define as_exp_min(...) {.op=_AS_EXP_CODE_MIN}, __VA_ARGS__, \
1513 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1532 #define as_exp_max(...) {.op=_AS_EXP_CODE_MAX}, __VA_ARGS__, \
1533 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1563 #define as_exp_cond(...) {.op=_AS_EXP_CODE_COND}, __VA_ARGS__, \
1564 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1584 #define as_exp_let(...) \
1585 {.op=_AS_EXP_CODE_LET}, __VA_ARGS__, \
1586 {.op=_AS_EXP_CODE_END_OF_VA_ARGS}
1606 #define as_exp_def(__var_name, __expr) \
1607 _AS_EXP_VAL_RAWSTR(__var_name), __expr
1626 #define as_exp_var(__var_name) \
1627 {.op=_AS_EXP_CODE_VAR, .count=2}, _AS_EXP_VAL_RAWSTR(__var_name)
1633 #define _AS_EXP_VAL_RTYPE(__val) {.op=_AS_EXP_CODE_VAL_RTYPE, .v.int_val=__val}
1635 #define _AS_EXP_LIST_MOD(__ctx, __pol, __op, __param, __extra_param) \
1636 {.op=_AS_EXP_CODE_CALL, .count=5}, \
1637 _AS_EXP_VAL_RTYPE(as_exp_get_ctx_type(__ctx, AS_EXP_TYPE_LIST)), \
1638 as_exp_int(_AS_EXP_SYS_CALL_CDT | _AS_EXP_SYS_FLAG_MODIFY_LOCAL), \
1639 {.op=_AS_EXP_CODE_CALL_VOP_START, .count=1 + __param + ((uintptr_t)(__pol) == (uintptr_t)NULL ? 0 : __extra_param), .v.ctx=__ctx}, \
1652 #define as_exp_list_append(__ctx, __pol, __val, __bin) \
1653 _AS_EXP_LIST_MOD(__ctx, __pol, AS_CDT_OP_LIST_APPEND, 1, 2), \
1655 {.op=_AS_EXP_CODE_CDT_LIST_CRMOD, .v.list_pol = __pol}, \
1668 #define as_exp_list_append_items(__ctx, __pol, __val, __bin) \
1669 _AS_EXP_LIST_MOD(__ctx, __pol, AS_CDT_OP_LIST_APPEND_ITEMS, 1, 2), \
1671 {.op=_AS_EXP_CODE_CDT_LIST_CRMOD, .v.list_pol = __pol}, \
1685 #define as_exp_list_insert(__ctx, __pol, __idx, __val, __bin) \
1686 _AS_EXP_LIST_MOD(__ctx, __pol, AS_CDT_OP_LIST_INSERT, 2, 1), \
1688 {.op=_AS_EXP_CODE_CDT_LIST_MOD, .v.list_pol = __pol}, \
1702 #define as_exp_list_insert_items(__ctx, __pol, __idx, __val, __bin) \
1703 _AS_EXP_LIST_MOD(__ctx, __pol, AS_CDT_OP_LIST_INSERT_ITEMS, 2, 1), \
1705 {.op=_AS_EXP_CODE_CDT_LIST_MOD, .v.list_pol = __pol}, \
1719 #define as_exp_list_increment(__ctx, __pol, __idx, __val, __bin) \
1720 _AS_EXP_LIST_MOD(__ctx, __pol, AS_CDT_OP_LIST_INCREMENT, 2, 2), \
1722 {.op=_AS_EXP_CODE_CDT_LIST_CRMOD, .v.list_pol = __pol}, \
1736 #define as_exp_list_set(__ctx, __pol, __idx, __val, __bin) \
1737 _AS_EXP_LIST_MOD(__ctx, __pol, AS_CDT_OP_LIST_SET, 2, 1), \
1739 {.op=_AS_EXP_CODE_CDT_LIST_MOD, .v.list_pol = __pol}, \
1750 #define as_exp_list_clear(__ctx, __bin) \
1751 _AS_EXP_LIST_MOD(__ctx, NULL, AS_CDT_OP_LIST_CLEAR, 0, 0), \
1763 #define as_exp_list_sort(__ctx, __order, __bin) \
1764 _AS_EXP_LIST_MOD(__ctx, NULL, AS_CDT_OP_LIST_SORT, 1, 0), \
1765 as_exp_int(__order), \
1778 #define as_exp_list_remove_by_value(__ctx, __rtype, __val, __bin) \
1779 _AS_EXP_LIST_MOD(__ctx, NULL, AS_CDT_OP_LIST_REMOVE_ALL_BY_VALUE, 2, 0), \
1780 as_exp_int(__rtype), \
1794 #define as_exp_list_remove_by_value_list(__ctx, __rtype, __values, __bin) \
1795 _AS_EXP_LIST_MOD(__ctx, NULL, AS_CDT_OP_LIST_REMOVE_BY_VALUE_LIST, 2, 0), \
1796 as_exp_int(__rtype), \
1813 #define as_exp_list_remove_by_value_range(__ctx, __rtype, __begin, __end, __bin) \
1814 _AS_EXP_LIST_MOD(__ctx, NULL, AS_CDT_OP_LIST_REMOVE_BY_VALUE_INTERVAL, 3, 0), \
1815 as_exp_int(__rtype), \
1830 #define as_exp_list_remove_by_rel_rank_range_to_end(__ctx, __rtype, __val, __rank, __bin) \
1831 _AS_EXP_LIST_MOD(__ctx, NULL, AS_CDT_OP_LIST_REMOVE_BY_VALUE_REL_RANK_RANGE, 3, 0), \
1832 as_exp_int(__rtype), \
1849 #define as_exp_list_remove_by_rel_rank_range(__ctx, __rtype, __val, __rank, __count, __bin) \
1850 _AS_EXP_LIST_MOD(__ctx, NULL, AS_CDT_OP_LIST_REMOVE_BY_VALUE_REL_RANK_RANGE, 4, 0), \
1851 as_exp_int(__rtype), \
1852 __val, __rank, __count, \
1864 #define as_exp_list_remove_by_index(__ctx, __idx, __bin) \
1865 _AS_EXP_LIST_MOD(__ctx, NULL, AS_CDT_OP_LIST_REMOVE_BY_INDEX, 2, 0), \
1866 as_exp_int(AS_LIST_RETURN_NONE), \
1880 #define as_exp_list_remove_by_index_range_to_end(__ctx, __rtype, __idx, __bin) \
1881 _AS_EXP_LIST_MOD(__ctx, NULL, AS_CDT_OP_LIST_REMOVE_BY_INDEX_RANGE, 2, 0), \
1882 as_exp_int(__rtype), \
1897 #define as_exp_list_remove_by_index_range(__ctx, __rtype, __idx, __count, __bin) \
1898 _AS_EXP_LIST_MOD(__ctx, NULL, AS_CDT_OP_LIST_REMOVE_BY_INDEX_RANGE, 3, 0), \
1899 as_exp_int(__rtype), \
1912 #define as_exp_list_remove_by_rank(__ctx, __rank, __bin) \
1913 _AS_EXP_LIST_MOD(__ctx, NULL, AS_CDT_OP_LIST_REMOVE_BY_RANK, 2, 0), \
1914 as_exp_int(AS_LIST_RETURN_NONE), \
1928 #define as_exp_list_remove_by_rank_range_to_end(__ctx, __rtype, __rank, __bin) \
1929 _AS_EXP_LIST_MOD(__ctx, NULL, AS_CDT_OP_LIST_REMOVE_BY_RANK_RANGE, 2, 0), \
1930 as_exp_int(__rtype), \
1945 #define as_exp_list_remove_by_rank_range(__ctx, __rtype, __rank, __count, __bin) \
1946 _AS_EXP_LIST_MOD(__ctx, NULL, AS_CDT_OP_LIST_REMOVE_BY_RANK_RANGE, 3, 0), \
1947 as_exp_int(__rtype), \
1955 #define _AS_EXP_CDT_LIST_READ(__type, __rtype, __is_multi) \
1956 {.op=_AS_EXP_CODE_CALL, .count=5}, \
1957 _AS_EXP_VAL_RTYPE(as_exp_get_list_type(__type, __rtype, __is_multi)), \
1958 as_exp_int(_AS_EXP_SYS_CALL_CDT)
1960 #define _AS_EXP_LIST_START(__ctx, __op, __param) \
1961 {.op=_AS_EXP_CODE_CALL_VOP_START, .count=1 + __param, .v.ctx=__ctx}, \
1972 #define as_exp_list_size(__ctx, __bin) \
1973 _AS_EXP_CDT_LIST_READ(AS_EXP_TYPE_AUTO, AS_LIST_RETURN_COUNT, false), \
1974 _AS_EXP_LIST_START(__ctx, AS_CDT_OP_LIST_SIZE, 0), \
1988 #define as_exp_list_get_by_value(__ctx, __rtype, __val, __bin) \
1989 _AS_EXP_CDT_LIST_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
1990 _AS_EXP_LIST_START(__ctx, AS_CDT_OP_LIST_GET_ALL_BY_VALUE, 2), \
1991 as_exp_int(__rtype), \
2007 #define as_exp_list_get_by_value_range(__ctx, __rtype, __begin, __end, __bin) \
2008 _AS_EXP_CDT_LIST_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2009 _AS_EXP_LIST_START(__ctx, AS_CDT_OP_LIST_GET_BY_VALUE_INTERVAL, 3), \
2010 as_exp_int(__rtype), \
2025 #define as_exp_list_get_by_value_list(__ctx, __rtype, __val, __bin) \
2026 _AS_EXP_CDT_LIST_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2027 _AS_EXP_LIST_START(__ctx, AS_CDT_OP_LIST_GET_BY_VALUE_LIST, 2), \
2028 as_exp_int(__rtype), \
2044 #define as_exp_list_get_by_rel_rank_range_to_end(__ctx, __rtype, __val, __rank, __bin) \
2045 _AS_EXP_CDT_LIST_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2046 _AS_EXP_LIST_START(__ctx, AS_CDT_OP_LIST_GET_BY_VALUE_REL_RANK_RANGE, 3), \
2047 as_exp_int(__rtype), \
2064 #define as_exp_list_get_by_rel_rank_range(__ctx, __rtype, __val, __rank, __count, __bin) \
2065 _AS_EXP_CDT_LIST_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2066 _AS_EXP_LIST_START(__ctx, AS_CDT_OP_LIST_GET_BY_VALUE_REL_RANK_RANGE, 4), \
2067 as_exp_int(__rtype), \
2068 __val, __rank, __count, \
2083 #define as_exp_list_get_by_index(__ctx, __rtype, __vtype, __idx, __bin) \
2084 _AS_EXP_CDT_LIST_READ(__vtype, __rtype, false), \
2085 _AS_EXP_LIST_START(__ctx, AS_CDT_OP_LIST_GET_BY_INDEX, 2), \
2086 as_exp_int(__rtype), \
2101 #define as_exp_list_get_by_index_range_to_end(__ctx, __rtype, __idx, __bin) \
2102 _AS_EXP_CDT_LIST_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2103 _AS_EXP_LIST_START(__ctx, AS_CDT_OP_LIST_GET_BY_INDEX_RANGE, 2), \
2104 as_exp_int(__rtype), \
2120 #define as_exp_list_get_by_index_range(__ctx, __rtype, __idx, __count, __bin) \
2121 _AS_EXP_CDT_LIST_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2122 _AS_EXP_LIST_START(__ctx, AS_CDT_OP_LIST_GET_BY_INDEX_RANGE, 3), \
2123 as_exp_int(__rtype), \
2139 #define as_exp_list_get_by_rank(__ctx, __rtype, __vtype, __rank, __bin) \
2140 _AS_EXP_CDT_LIST_READ(__vtype, __rtype, false), \
2141 _AS_EXP_LIST_START(__ctx, AS_CDT_OP_LIST_GET_BY_RANK, 2), \
2142 as_exp_int(__rtype), \
2157 #define as_exp_list_get_by_rank_range_to_end(__ctx, __rtype, __rank, __bin) \
2158 _AS_EXP_CDT_LIST_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2159 _AS_EXP_LIST_START(__ctx, AS_CDT_OP_LIST_GET_BY_RANK_RANGE, 2), \
2160 as_exp_int(__rtype), \
2176 #define as_exp_list_get_by_rank_range(__ctx, __rtype, __rank, __count, __bin) \
2177 _AS_EXP_CDT_LIST_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2178 _AS_EXP_LIST_START(__ctx, AS_CDT_OP_LIST_GET_BY_RANK_RANGE, 3), \
2179 as_exp_int(__rtype), \
2187 #define _AS_EXP_MAP_MOD(__ctx, __pol, __op, __param, __extra_param) \
2188 {.op=_AS_EXP_CODE_CALL, .count=5}, \
2189 _AS_EXP_VAL_RTYPE(as_exp_get_ctx_type(__ctx, AS_EXP_TYPE_MAP)), \
2190 as_exp_int(_AS_EXP_SYS_CALL_CDT | _AS_EXP_SYS_FLAG_MODIFY_LOCAL), \
2191 {.op=_AS_EXP_CODE_CALL_VOP_START, .count=1 + __param + ((uintptr_t)(__pol) == (uintptr_t)NULL ? 0 : __extra_param), .v.ctx=__ctx}, \
2205 #define as_exp_map_put(__ctx, __pol, __key, __val, __bin) \
2206 _AS_EXP_MAP_MOD(__ctx, __pol, AS_CDT_OP_MAP_PUT, 2, 2), \
2208 {.op=_AS_EXP_CODE_CDT_MAP_CRMOD, .v.map_pol = __pol}, \
2221 #define as_exp_map_put_items(__ctx, __pol, __map, __bin) \
2222 _AS_EXP_MAP_MOD(__ctx, __pol, AS_CDT_OP_MAP_PUT_ITEMS, 1, 2), \
2224 {.op=_AS_EXP_CODE_CDT_MAP_CRMOD, .v.map_pol = __pol}, \
2239 #define as_exp_map_increment(__ctx, __pol, __key, __val, __bin) \
2240 _AS_EXP_MAP_MOD(__ctx, __pol, AS_CDT_OP_MAP_INCREMENT, 2, 1), \
2242 {.op=_AS_EXP_CODE_CDT_MAP_MOD, .v.map_pol = __pol}, \
2253 #define as_exp_map_clear(__ctx, __bin) \
2254 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_CLEAR, 0, 0), \
2266 #define as_exp_map_remove_by_key(__ctx, __key, __bin) \
2267 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_KEY, 2, 0), \
2268 as_exp_int(AS_MAP_RETURN_NONE), \
2282 #define as_exp_map_remove_by_key_list(__ctx, __rtype, __keys, __bin) \
2283 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_KEY_LIST, 2, 0), \
2284 as_exp_int(__rtype), \
2301 #define as_exp_map_remove_by_key_range(__ctx, __rtype, __begin, __end, __bin) \
2302 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_KEY_INTERVAL, 3, 0), \
2303 as_exp_int(__rtype), \
2318 #define as_exp_map_remove_by_key_rel_index_range_to_end(__ctx, __rtype, __key, __idx, __bin) \
2319 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_KEY_REL_INDEX_RANGE, 3, 0), \
2320 as_exp_int(__rtype), \
2336 #define as_exp_map_remove_by_key_rel_index_range(__ctx, __rtype, __key, __idx, __count, __bin) \
2337 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_KEY_REL_INDEX_RANGE, 4, 0), \
2338 as_exp_int(__rtype), \
2339 __key, __idx, __count, \
2352 #define as_exp_map_remove_by_value(__ctx, __rtype, __val, __bin) \
2353 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_ALL_BY_VALUE, 2, 0), \
2354 as_exp_int(__rtype), \
2368 #define as_exp_map_remove_by_value_list(__ctx, __rtype, __values, __bin) \
2369 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_VALUE_LIST, 2, 0), \
2370 as_exp_int(__rtype), \
2387 #define as_exp_map_remove_by_value_range(__ctx, __rtype, __begin, __end, __bin) \
2388 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_VALUE_INTERVAL, 3, 0), \
2389 as_exp_int(__rtype), \
2404 #define as_exp_map_remove_by_value_rel_rank_range_to_end(__ctx, __rtype, __val, __rank, __bin) \
2405 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_VALUE_REL_RANK_RANGE, 3, 0), \
2406 as_exp_int(__rtype), \
2423 #define as_exp_map_remove_by_value_rel_rank_range(__ctx, __rtype, __val, __rank, __count, __bin) \
2424 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_VALUE_REL_RANK_RANGE, 4, 0), \
2425 as_exp_int(__rtype), \
2426 __val, __rank, __count, \
2438 #define as_exp_map_remove_by_index(__ctx, __idx, __bin) \
2439 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_INDEX, 2, 0), \
2440 as_exp_int(AS_MAP_RETURN_NONE), \
2454 #define as_exp_map_remove_by_index_range_to_end(__ctx, __rtype, __idx, __bin) \
2455 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_INDEX_RANGE, 2, 0), \
2456 as_exp_int(__rtype), \
2471 #define as_exp_map_remove_by_index_range(__ctx, __rtype, __idx, __count, __bin) \
2472 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_INDEX_RANGE, 3, 0), \
2473 as_exp_int(__rtype), \
2486 #define as_exp_map_remove_by_rank(__ctx, __rank, __bin) \
2487 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_RANK, 2, 0), \
2488 as_exp_int(AS_MAP_RETURN_NONE), \
2502 #define as_exp_map_remove_by_rank_range_to_end(__ctx, __rtype, __rank, __bin) \
2503 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_RANK_RANGE, 2, 0), \
2504 as_exp_int(__rtype), \
2519 #define as_exp_map_remove_by_rank_range(__ctx, __rtype, __rank, __count, __bin) \
2520 _AS_EXP_MAP_MOD(__ctx, NULL, AS_CDT_OP_MAP_REMOVE_BY_RANK_RANGE, 3, 0), \
2521 as_exp_int(__rtype), \
2529 #define _AS_EXP_MAP_READ(__type__, __rtype, __is_multi) \
2530 {.op=_AS_EXP_CODE_CALL, .count=5}, \
2531 _AS_EXP_VAL_RTYPE(as_exp_get_map_type(__type__, __rtype, __is_multi)), \
2532 as_exp_int(_AS_EXP_SYS_CALL_CDT)
2534 #define _AS_EXP_MAP_START(__ctx, __op, __param) \
2535 {.op=_AS_EXP_CODE_CALL_VOP_START, .count=1 + __param, .v.ctx=__ctx}, \
2546 #define as_exp_map_size(__ctx, __bin) \
2547 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, AS_MAP_RETURN_COUNT, false), \
2548 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_SIZE, 0), \
2563 #define as_exp_map_get_by_key(__ctx, __rtype, __vtype, __key, __bin) \
2564 _AS_EXP_MAP_READ(__vtype, __rtype, false), \
2565 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_KEY, 2), \
2566 as_exp_int(__rtype), \
2584 #define as_exp_map_get_by_key_range(__ctx, __rtype, __begin, __end, __bin) \
2585 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2586 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_KEY_INTERVAL, 3), \
2587 as_exp_int(__rtype), \
2602 #define as_exp_map_get_by_key_list(__ctx, __rtype, __keys, __bin) \
2603 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2604 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_KEY_LIST, 2), \
2605 as_exp_int(__rtype), \
2621 #define as_exp_map_get_by_key_rel_index_range_to_end(__ctx, __rtype, __key, __idx, __bin) \
2622 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2623 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_KEY_REL_INDEX_RANGE, 3), \
2624 as_exp_int(__rtype), \
2641 #define as_exp_map_get_by_key_rel_index_range(__ctx, __rtype, __key, __idx, __count, __bin) \
2642 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2643 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_KEY_REL_INDEX_RANGE, 4), \
2644 as_exp_int(__rtype), \
2645 __key, __idx, __count, \
2659 #define as_exp_map_get_by_value(__ctx, __rtype, __val, __bin) \
2660 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2661 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_ALL_BY_VALUE, 2), \
2662 as_exp_int(__rtype), \
2680 #define as_exp_map_get_by_value_range(__ctx, __rtype, __begin, __end, __bin) \
2681 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2682 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_VALUE_INTERVAL, 3), \
2683 as_exp_int(__rtype), \
2698 #define as_exp_map_get_by_value_list(__ctx, __rtype, __values, __bin) \
2699 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2700 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_VALUE_LIST, 2), \
2701 as_exp_int(__rtype), \
2717 #define as_exp_map_get_by_value_rel_rank_range_to_end(__ctx, __rtype, __val, __rank, __bin) \
2718 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2719 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_VALUE_REL_RANK_RANGE, 3), \
2720 as_exp_int(__rtype), \
2737 #define as_exp_map_get_by_value_rel_rank_range(__ctx, __rtype, __val, __rank, __count, __bin) \
2738 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2739 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_VALUE_REL_RANK_RANGE, 4), \
2740 as_exp_int(__rtype), \
2741 __val, __rank, __count, \
2756 #define as_exp_map_get_by_index(__ctx, __rtype, __vtype, __idx, __bin) \
2757 _AS_EXP_MAP_READ(__vtype, __rtype, false), \
2758 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_INDEX, 2), \
2759 as_exp_int(__rtype), \
2774 #define as_exp_map_get_by_index_range_to_end(__ctx, __rtype, __idx, __bin) \
2775 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2776 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_INDEX_RANGE, 2), \
2777 as_exp_int(__rtype), \
2793 #define as_exp_map_get_by_index_range(__ctx, __rtype, __idx, __count, __bin) \
2794 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2795 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_INDEX_RANGE, 3), \
2796 as_exp_int(__rtype), \
2812 #define as_exp_map_get_by_rank(__ctx, __rtype, __vtype, __rank, __bin) \
2813 _AS_EXP_MAP_READ(__vtype, __rtype, false), \
2814 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_RANK, 2), \
2815 as_exp_int(__rtype), \
2830 #define as_exp_map_get_by_rank_range_to_end(__ctx, __rtype, __rank, __bin) \
2831 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2832 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_RANK_RANGE, 2), \
2833 as_exp_int(__rtype), \
2849 #define as_exp_map_get_by_rank_range(__ctx, __rtype, __rank, __count, __bin) \
2850 _AS_EXP_MAP_READ(AS_EXP_TYPE_AUTO, __rtype, true), \
2851 _AS_EXP_MAP_START(__ctx, AS_CDT_OP_MAP_GET_BY_RANK_RANGE, 3), \
2852 as_exp_int(__rtype), \
2860 #define _AS_EXP_BIT_MOD() \
2861 {.op=_AS_EXP_CODE_CALL, .count=5}, \
2862 _AS_EXP_VAL_RTYPE(AS_EXP_TYPE_BLOB), \
2863 as_exp_int(_AS_EXP_SYS_CALL_BITS | _AS_EXP_SYS_FLAG_MODIFY_LOCAL)
2865 #define _AS_EXP_BIT_MOD_START(__op, __n_params) \
2866 _AS_EXP_BIT_MOD(), \
2867 {.op=_AS_EXP_CODE_CALL_VOP_START, .count=1 + (__n_params) }, \
2880 #define as_exp_bit_resize(__policy, __byte_size, __flags, __bin) \
2881 _AS_EXP_BIT_MOD_START(AS_BIT_OP_RESIZE, 3), \
2883 as_exp_uint(__policy ? ((as_bit_policy*)(__policy))->flags : 0), \
2884 as_exp_uint(__flags), \
2897 #define as_exp_bit_insert(__policy, __byte_offset, __value, __bin) \
2898 _AS_EXP_BIT_MOD_START(AS_BIT_OP_INSERT, 3), \
2901 as_exp_uint(__policy ? ((as_bit_policy*)(__policy))->flags : 0), \
2914 #define as_exp_bit_remove(__policy, __byte_offset, __byte_size, __bin) \
2915 _AS_EXP_BIT_MOD_START(AS_BIT_OP_REMOVE, 3), \
2918 as_exp_uint(__policy ? ((as_bit_policy*)(__policy))->flags : 0), \
2932 #define as_exp_bit_set(__policy, __bit_offset, __bit_size, __value, __bin) \
2933 _AS_EXP_BIT_MOD_START(AS_BIT_OP_SET, 4), \
2937 as_exp_uint(__policy ? ((as_bit_policy*)(__policy))->flags : 0), \
2951 #define as_exp_bit_or(__policy, __bit_offset, __bit_size, __value, __bin) \
2952 _AS_EXP_BIT_MOD_START(AS_BIT_OP_OR, 4), \
2956 as_exp_uint(__policy ? ((as_bit_policy*)(__policy))->flags : 0), \
2970 #define as_exp_bit_xor(__policy, __bit_offset, __bit_size, __value, __bin) \
2971 _AS_EXP_BIT_MOD_START(AS_BIT_OP_XOR, 4), \
2975 as_exp_uint(__policy ? ((as_bit_policy*)(__policy))->flags : 0), \
2989 #define as_exp_bit_and(__policy, __bit_offset, __bit_size, __value, __bin) \
2990 _AS_EXP_BIT_MOD_START(AS_BIT_OP_AND, 4), \
2994 as_exp_uint(__policy ? ((as_bit_policy*)(__policy))->flags : 0), \
3007 #define as_exp_bit_not(__policy, __bit_offset, __bit_size, __bin) \
3008 _AS_EXP_BIT_MOD_START(AS_BIT_OP_NOT, 3), \
3011 as_exp_uint(__policy ? ((as_bit_policy*)(__policy))->flags : 0), \
3025 #define as_exp_bit_lshift(__policy, __bit_offset, __bit_size, __shift, __bin) \
3026 _AS_EXP_BIT_MOD_START(AS_BIT_OP_LSHIFT, 4), \
3030 as_exp_uint(__policy ? ((as_bit_policy*)(__policy))->flags : 0), \
3044 #define as_exp_bit_rshift(__policy, __bit_offset, __bit_size, __shift, __bin) \
3045 _AS_EXP_BIT_MOD_START(AS_BIT_OP_RSHIFT, 4), \
3049 as_exp_uint(__policy ? ((as_bit_policy*)(__policy))->flags : 0), \
3065 #define as_exp_bit_add(__policy, __bit_offset, __bit_size, __value, __action, __bin) \
3066 _AS_EXP_BIT_MOD_START(AS_BIT_OP_ADD, 5), \
3070 as_exp_uint(__policy ? ((as_bit_policy*)(__policy))->flags : 0), \
3071 as_exp_uint(__action), \
3087 #define as_exp_bit_subtract(__policy, __bit_offset, __bit_size, __value, __action, __bin) \
3088 _AS_EXP_BIT_MOD_START(AS_BIT_OP_SUBTRACT, 5), \
3092 as_exp_uint(__policy ? ((as_bit_policy*)(__policy))->flags : 0), \
3093 as_exp_uint(__action), \
3108 #define as_exp_bit_set_int(__policy, __bit_offset, __bit_size, __value, __bin) \
3109 _AS_EXP_BIT_MOD_START(AS_BIT_OP_SET_INT, 4), \
3113 as_exp_uint(__policy ? ((as_bit_policy*)(__policy))->flags : 0), \
3120 #define _AS_EXP_BIT_READ(__rtype) \
3121 {.op=_AS_EXP_CODE_CALL, .count=5}, \
3122 _AS_EXP_VAL_RTYPE(__rtype), \
3123 as_exp_int(_AS_EXP_SYS_CALL_BITS)
3125 #define _AS_EXP_BIT_READ_START(__rtype, __op, __n_params) \
3126 _AS_EXP_BIT_READ(__rtype), \
3127 {.op=_AS_EXP_CODE_CALL_VOP_START, .count=1 + (__n_params) }, \
3139 #define as_exp_bit_get(__bit_offset, __bit_size, __bin) \
3140 _AS_EXP_BIT_READ_START(AS_EXP_TYPE_BLOB, AS_BIT_OP_GET, 2), \
3154 #define as_exp_bit_count(__bit_offset, __bit_size, __bin) \
3155 _AS_EXP_BIT_READ_START(AS_EXP_TYPE_INT, AS_BIT_OP_COUNT, 2), \
3170 #define as_exp_bit_lscan(__bit_offset, __bit_size, __value, __bin) \
3171 _AS_EXP_BIT_READ_START(AS_EXP_TYPE_INT, AS_BIT_OP_LSCAN, 3), \
3187 #define as_exp_bit_rscan(__bit_offset, __bit_size, __value, __bin) \
3188 _AS_EXP_BIT_READ_START(AS_EXP_TYPE_INT, AS_BIT_OP_RSCAN, 3), \
3204 #define as_exp_bit_get_int(__bit_offset, __bit_size, __sign, __bin) \
3205 _AS_EXP_BIT_READ_START(AS_EXP_TYPE_INT, AS_BIT_OP_GET_INT, 3), \
3208 as_exp_int(__sign ? 1 : 0), \
3215 #define _AS_EXP_HLL_MOD() \
3216 {.op=_AS_EXP_CODE_CALL, .count=5}, \
3217 _AS_EXP_VAL_RTYPE(AS_EXP_TYPE_HLL), \
3218 as_exp_int(_AS_EXP_SYS_CALL_HLL | _AS_EXP_SYS_FLAG_MODIFY_LOCAL)
3220 #define _AS_EXP_HLL_MOD_START(__op, __n_params) \
3221 _AS_EXP_HLL_MOD(), \
3222 {.op=_AS_EXP_CODE_CALL_VOP_START, .count=1 + (__n_params) }, \
3236 #define as_exp_hll_init_mh(__policy, __index_bit_count, __mh_bit_count, __bin) \
3237 _AS_EXP_HLL_MOD_START(AS_HLL_OP_INIT, 3), \
3238 as_exp_int(__index_bit_count), \
3239 as_exp_int(__mh_bit_count), \
3240 as_exp_int(__policy == NULL ? 0 : ((as_hll_policy*)__policy)->flags), \
3252 #define as_exp_hll_init(__policy, __index_bit_count, __bin) \
3253 _AS_EXP_HLL_MOD_START(AS_HLL_OP_INIT, 2), \
3254 as_exp_int(__index_bit_count), \
3255 as_exp_int(__policy == NULL ? 0 : ((as_hll_policy*)__policy)->flags), \
3270 #define as_exp_hll_add_mh(__policy, __list, __index_bit_count, __mh_bit_count, __bin) \
3271 _AS_EXP_HLL_MOD_START(AS_HLL_OP_ADD, 4), \
3273 as_exp_int(__index_bit_count), \
3274 as_exp_int(__mh_bit_count), \
3275 as_exp_int(__policy == NULL ? 0 : ((as_hll_policy*)__policy)->flags), \
3288 #define as_exp_hll_add(__policy, __list, __index_bit_count, __bin) \
3289 _AS_EXP_HLL_MOD_START(AS_HLL_OP_ADD, 4), \
3291 as_exp_int(__index_bit_count), \
3293 as_exp_int(__policy == NULL ? 0 : ((as_hll_policy*)__policy)->flags), \
3305 #define as_exp_hll_update(__policy, __list, __bin) \
3306 _AS_EXP_HLL_MOD_START(AS_HLL_OP_ADD, 4), \
3310 as_exp_int(__policy == NULL ? 0 : ((as_hll_policy*)__policy)->flags), \
3317 #define _AS_EXP_HLL_READ(__rtype) \
3318 {.op=_AS_EXP_CODE_CALL, .count=5}, \
3319 _AS_EXP_VAL_RTYPE(__rtype), \
3320 as_exp_int(_AS_EXP_SYS_CALL_HLL)
3322 #define _AS_EXP_HLL_READ_START(__rtype, __op, __n_params) \
3323 _AS_EXP_HLL_READ(__rtype), \
3324 {.op=_AS_EXP_CODE_CALL_VOP_START, .count=1 + (__n_params) }, \
3334 #define as_exp_hll_get_count(__bin) \
3335 _AS_EXP_HLL_READ_START(AS_EXP_TYPE_INT, AS_HLL_OP_COUNT, 0), \
3346 #define as_exp_hll_get_union(__list, __bin) \
3347 _AS_EXP_HLL_READ_START(AS_EXP_TYPE_HLL, AS_HLL_OP_GET_UNION, 1), \
3359 #define as_exp_hll_get_union_count(__list, __bin) \
3360 _AS_EXP_HLL_READ_START(AS_EXP_TYPE_INT, AS_HLL_OP_UNION_COUNT, 1), \
3372 #define as_exp_hll_get_intersect_count(__list, __bin) \
3373 _AS_EXP_HLL_READ_START(AS_EXP_TYPE_INT, AS_HLL_OP_INTERSECT_COUNT, 1), \
3385 #define as_exp_hll_get_similarity(__list, __bin) \
3386 _AS_EXP_HLL_READ_START(AS_EXP_TYPE_FLOAT, AS_HLL_OP_SIMILARITY, 1), \
3397 #define as_exp_hll_describe(__bin) \
3398 _AS_EXP_HLL_READ_START(AS_EXP_TYPE_LIST, AS_HLL_OP_DESCRIBE, 0), \
3410 #define as_exp_hll_may_contain(__list, __bin) \
3411 _AS_EXP_HLL_READ_START(AS_EXP_TYPE_INT, AS_HLL_OP_MAY_CONTAIN, 1), \
3436 #define as_exp_expr(__e) \
3437 {.op=_AS_EXP_CODE_MERGE, .v.expr=__e}
3457 #define as_exp_build(__name, ...) \
3460 as_exp_entry __table__[] = { __VA_ARGS__ }; \
3461 __name = as_exp_compile(__table__, sizeof(__table__) / sizeof(as_exp_entry)); \
3478 #define as_exp_build_b64(__name, ...) \
3481 as_exp_entry __table__[] = { __VA_ARGS__ }; \
3482 as_exp* temp = as_exp_compile(__table__, sizeof(__table__) / sizeof(as_exp_entry)); \
3483 __name = as_exp_compile_b64(temp); \
3484 as_exp_destroy(temp); \
AS_EXTERN as_exp * as_exp_compile(as_exp_entry *table, uint32_t n)
static void as_exp_destroy_base64(char *base64)
AS_EXTERN int64_t as_exp_get_ctx_type(const as_cdt_ctx *ctx, as_exp_type default_type)
AS_EXTERN int64_t as_exp_get_list_type(as_exp_type default_type, as_list_return_type rtype, bool is_multi)
static char * as_exp_to_base64(as_exp *exp)
AS_EXTERN int64_t as_exp_get_map_type(as_exp_type type, as_map_return_type rtype, bool is_multi)
AS_EXTERN uint8_t * as_exp_write(as_exp *exp, uint8_t *ptr)
AS_EXTERN char * as_exp_compile_b64(as_exp *exp)
AS_EXTERN void as_exp_destroy(as_exp *exp)
AS_EXTERN void as_exp_destroy_b64(char *b64)
AS_EXTERN as_exp * as_exp_from_base64(const char *base64)
as_list_policy * list_pol