Lines Matching refs:iter

43 bson_iter_init (bson_iter_t  *iter, /* OUT */  in bson_iter_init()  argument
46 BSON_ASSERT (iter); in bson_iter_init()
50 memset (iter, 0, sizeof *iter); in bson_iter_init()
54 iter->raw = bson_get_data (bson); in bson_iter_init()
55 iter->len = bson->len; in bson_iter_init()
56 iter->off = 0; in bson_iter_init()
57 iter->type = 0; in bson_iter_init()
58 iter->key = 0; in bson_iter_init()
59 iter->d1 = 0; in bson_iter_init()
60 iter->d2 = 0; in bson_iter_init()
61 iter->d3 = 0; in bson_iter_init()
62 iter->d4 = 0; in bson_iter_init()
63 iter->next_off = 4; in bson_iter_init()
64 iter->err_off = 0; in bson_iter_init()
88 bson_iter_recurse (const bson_iter_t *iter, /* IN */ in bson_iter_recurse() argument
94 BSON_ASSERT (iter); in bson_iter_recurse()
97 if (ITER_TYPE (iter) == BSON_TYPE_DOCUMENT) { in bson_iter_recurse()
98 bson_iter_document (iter, &len, &data); in bson_iter_recurse()
99 } else if (ITER_TYPE (iter) == BSON_TYPE_ARRAY) { in bson_iter_recurse()
100 bson_iter_array (iter, &len, &data); in bson_iter_recurse()
139 bson_iter_init_find (bson_iter_t *iter, /* INOUT */ in bson_iter_init_find() argument
143 BSON_ASSERT (iter); in bson_iter_init_find()
147 return bson_iter_init (iter, bson) && bson_iter_find (iter, key); in bson_iter_init_find()
168 bson_iter_init_find_case (bson_iter_t *iter, /* INOUT */ in bson_iter_init_find_case() argument
172 BSON_ASSERT (iter); in bson_iter_init_find_case()
176 return bson_iter_init (iter, bson) && bson_iter_find_case (iter, key); in bson_iter_init_find_case()
197 _bson_iter_find_with_len (bson_iter_t *iter, /* INOUT */ in _bson_iter_find_with_len() argument
211 while (bson_iter_next (iter)) { in _bson_iter_find_with_len()
212 ikey = bson_iter_key (iter); in _bson_iter_find_with_len()
242 bson_iter_find (bson_iter_t *iter, /* INOUT */ in bson_iter_find() argument
245 BSON_ASSERT (iter); in bson_iter_find()
248 return _bson_iter_find_with_len (iter, key, -1); in bson_iter_find()
271 bson_iter_find_case (bson_iter_t *iter, /* INOUT */ argument
274 BSON_ASSERT (iter);
277 while (bson_iter_next (iter)) {
279 if (!_stricmp(key, bson_iter_key (iter))) {
281 if (!strcasecmp (key, bson_iter_key (iter))) {
310 bson_iter_find_descendant (bson_iter_t *iter, /* INOUT */ argument
318 BSON_ASSERT (iter);
328 if (_bson_iter_find_with_len (iter, dotkey, (int)sublen)) {
330 *descendant = *iter;
334 if (BSON_ITER_HOLDS_DOCUMENT (iter) || BSON_ITER_HOLDS_ARRAY (iter)) {
335 if (bson_iter_recurse (iter, &tmp)) {
363 bson_iter_key (const bson_iter_t *iter) /* IN */ argument
365 BSON_ASSERT (iter);
367 return bson_iter_key_unsafe (iter);
389 bson_iter_type (const bson_iter_t *iter) /* IN */ argument
391 BSON_ASSERT (iter);
392 BSON_ASSERT (iter->raw);
393 BSON_ASSERT (iter->len);
395 return bson_iter_type_unsafe (iter);
423 _bson_iter_next_internal (bson_iter_t *iter, /* INOUT */ argument
432 BSON_ASSERT (iter);
436 if (!iter->raw) {
442 data = iter->raw;
443 len = iter->len;
445 iter->off = iter->next_off;
446 iter->type = iter->off;
447 iter->key = iter->off + 1;
448 iter->d1 = 0;
449 iter->d2 = 0;
450 iter->d3 = 0;
451 iter->d4 = 0;
453 for (o = iter->off + 1; o < len; o++) {
455 iter->d1 = ++o;
464 *key = bson_iter_key_unsafe (iter);
465 *bson_type = ITER_TYPE (iter);
472 iter->next_off = o + 8;
481 iter->err_off = o;
485 iter->d2 = o + 4;
486 memcpy (&l, iter->raw + iter->d1, sizeof (l));
490 iter->err_off = o;
494 iter->next_off = o + 4 + l;
499 if (BSON_UNLIKELY ((l == 0) || (iter->next_off >= len))) {
500 iter->err_off = o;
507 if (BSON_UNLIKELY ((iter->raw + iter->d2)[l - 1] != '\0')) {
508 iter->err_off = o + 4 + l - 1;
519 iter->err_off = o;
523 iter->d2 = o + 4;
524 iter->d3 = o + 5;
526 memcpy (&l, iter->raw + iter->d1, sizeof (l));
530 iter->err_off = o;
534 subtype = *(iter->raw + iter->d2);
538 iter->err_off = o;
543 iter->next_off = o + 5 + l;
552 iter->err_off = o;
556 memcpy (&l, iter->raw + iter->d1, sizeof (l));
560 iter->err_off = o;
564 iter->next_off = o + l;
568 iter->next_off = o + 12;
573 memcpy (&val, iter->raw + iter->d1, 1);
575 iter->err_off = o;
579 iter->next_off = o + 1;
589 iter->d2 = ++o;
596 iter->err_off = iter->next_off;
608 iter->err_off = iter->next_off;
612 iter->next_off = o + 1;
620 iter->err_off = o;
624 iter->d2 = o + 4;
625 memcpy (&l, iter->raw + iter->d1, sizeof (l));
629 iter->err_off = o;
633 if ( *(iter->raw + o + l + 3) ) {
635 iter->err_off = o + l + 3;
639 iter->d3 = o + 4 + l;
640 iter->next_off = o + 4 + l + 12;
649 iter->err_off = o;
653 iter->d2 = o + 4;
654 iter->d3 = o + 8;
656 memcpy (&l, iter->raw + iter->d1, sizeof (l));
660 iter->err_off = o;
664 iter->next_off = o + l;
666 if (iter->next_off >= len) {
667 iter->err_off = o;
671 memcpy (&l, iter->raw + iter->d2, sizeof (l));
675 iter->err_off = o;
679 if ((o + 4 + 4 + l + 4) >= iter->next_off) {
680 iter->err_off = o + 4;
684 iter->d4 = o + 4 + 4 + l;
685 memcpy (&doclen, iter->raw + iter->d4, sizeof (doclen));
688 if ((o + 4 + 4 + l + doclen) != iter->next_off) {
689 iter->err_off = o + 4 + 4 + l;
695 iter->next_off = o + 4;
698 iter->next_off = o + 16;
704 iter->d1 = -1;
705 iter->next_off = o;
711 iter->err_off = o;
720 if (iter->next_off >= len) {
721 iter->err_off = o;
725 iter->err_off = 0;
730 iter->raw = NULL;
731 iter->len = 0;
732 iter->next_off = 0;
760 bson_iter_next (bson_iter_t *iter) /* INOUT */ argument
766 return _bson_iter_next_internal (iter, &key, &bson_type, &unsupported);
797 bson_iter_binary (const bson_iter_t *iter, /* IN */ argument
804 BSON_ASSERT (iter);
807 if (ITER_TYPE (iter) == BSON_TYPE_BINARY) {
812 *subtype = (bson_subtype_t) *(iter->raw + iter->d2);
815 memcpy (binary_len, (iter->raw + iter->d1), sizeof (*binary_len));
817 *binary = iter->raw + iter->d3;
859 bson_iter_bool (const bson_iter_t *iter) /* IN */ argument
861 BSON_ASSERT (iter);
863 if (ITER_TYPE (iter) == BSON_TYPE_BOOL) {
864 return bson_iter_bool_unsafe (iter);
892 bson_iter_as_bool (const bson_iter_t *iter) /* IN */ argument
894 BSON_ASSERT (iter);
896 switch ((int)ITER_TYPE (iter)) {
898 return bson_iter_bool (iter);
900 return !(bson_iter_double (iter) == 0.0);
902 return !(bson_iter_int64 (iter) == 0);
904 return !(bson_iter_int32 (iter) == 0);
933 bson_iter_double (const bson_iter_t *iter) /* IN */ argument
935 BSON_ASSERT (iter);
937 if (ITER_TYPE (iter) == BSON_TYPE_DOUBLE) {
938 return bson_iter_double_unsafe (iter);
962 bson_iter_int32 (const bson_iter_t *iter) /* IN */ argument
964 BSON_ASSERT (iter);
966 if (ITER_TYPE (iter) == BSON_TYPE_INT32) {
967 return bson_iter_int32_unsafe (iter);
992 bson_iter_int64 (const bson_iter_t *iter) /* IN */ argument
994 BSON_ASSERT (iter);
996 if (ITER_TYPE (iter) == BSON_TYPE_INT64) {
997 return bson_iter_int64_unsafe (iter);
1026 bson_iter_as_int64 (const bson_iter_t *iter) /* IN */ argument
1028 BSON_ASSERT (iter);
1030 switch ((int)ITER_TYPE (iter)) {
1032 return (int64_t)bson_iter_bool (iter);
1034 return (int64_t)bson_iter_double (iter);
1036 return bson_iter_int64 (iter);
1038 return (int64_t)bson_iter_int32 (iter);
1063 bson_iter_decimal128 (const bson_iter_t *iter, /* IN */ argument
1066 BSON_ASSERT (iter);
1068 if (ITER_TYPE (iter) == BSON_TYPE_DECIMAL128) {
1069 bson_iter_decimal128_unsafe (iter, dec);
1095 bson_iter_oid (const bson_iter_t *iter) /* IN */ argument
1097 BSON_ASSERT (iter);
1099 if (ITER_TYPE (iter) == BSON_TYPE_OID) {
1100 return bson_iter_oid_unsafe (iter);
1125 bson_iter_regex (const bson_iter_t *iter, /* IN */ argument
1131 BSON_ASSERT (iter);
1133 if (ITER_TYPE (iter) == BSON_TYPE_REGEX) {
1134 ret = (const char *)(iter->raw + iter->d1);
1135 ret_options = (const char *)(iter->raw + iter->d2);
1168 bson_iter_utf8 (const bson_iter_t *iter, /* IN */ argument
1171 BSON_ASSERT (iter);
1173 if (ITER_TYPE (iter) == BSON_TYPE_UTF8) {
1175 *length = bson_iter_utf8_len_unsafe (iter);
1178 return (const char *)(iter->raw + iter->d2);
1208 bson_iter_dup_utf8 (const bson_iter_t *iter, /* IN */ argument
1215 BSON_ASSERT (iter);
1217 if ((str = bson_iter_utf8 (iter, &local_length))) {
1254 bson_iter_code (const bson_iter_t *iter, /* IN */ argument
1257 BSON_ASSERT (iter);
1259 if (ITER_TYPE (iter) == BSON_TYPE_CODE) {
1261 *length = bson_iter_utf8_len_unsafe (iter);
1264 return (const char *)(iter->raw + iter->d2);
1303 bson_iter_codewscope (const bson_iter_t *iter, /* IN */ argument
1310 BSON_ASSERT (iter);
1312 if (ITER_TYPE (iter) == BSON_TYPE_CODEWSCOPE) {
1314 memcpy (&len, iter->raw + iter->d2, sizeof (len));
1318 memcpy (&len, iter->raw + iter->d4, sizeof (len));
1320 *scope = iter->raw + iter->d4;
1321 return (const char *)(iter->raw + iter->d3);
1371 bson_iter_dbpointer (const bson_iter_t *iter, /* IN */ argument
1376 BSON_ASSERT (iter);
1386 if (ITER_TYPE (iter) == BSON_TYPE_DBPOINTER) {
1388 memcpy (collection_len, (iter->raw + iter->d1), sizeof (*collection_len));
1397 *collection = (const char *)(iter->raw + iter->d2);
1401 *oid = (const bson_oid_t *)(iter->raw + iter->d3);
1430 bson_iter_symbol (const bson_iter_t *iter, /* IN */ argument
1436 BSON_ASSERT (iter);
1438 if (ITER_TYPE (iter) == BSON_TYPE_SYMBOL) {
1439 ret = (const char *)(iter->raw + iter->d2);
1440 ret_length = bson_iter_utf8_len_unsafe (iter);
1469 bson_iter_date_time (const bson_iter_t *iter) /* IN */ argument
1471 BSON_ASSERT (iter);
1473 if (ITER_TYPE (iter) == BSON_TYPE_DATE_TIME) {
1474 return bson_iter_int64_unsafe (iter);
1499 bson_iter_time_t (const bson_iter_t *iter) /* IN */ argument
1501 BSON_ASSERT (iter);
1503 if (ITER_TYPE (iter) == BSON_TYPE_DATE_TIME) {
1504 return bson_iter_time_t_unsafe (iter);
1534 bson_iter_timestamp (const bson_iter_t *iter, /* IN */ argument
1542 BSON_ASSERT (iter);
1544 if (ITER_TYPE (iter) == BSON_TYPE_TIMESTAMP) {
1545 memcpy (&encoded, iter->raw + iter->d1, sizeof (encoded));
1583 bson_iter_timeval (const bson_iter_t *iter, /* IN */ argument
1586 BSON_ASSERT (iter);
1588 if (ITER_TYPE (iter) == BSON_TYPE_DATE_TIME) {
1589 bson_iter_timeval_unsafe (iter, tv);
1641 bson_iter_document (const bson_iter_t *iter, /* IN */ argument
1645 BSON_ASSERT (iter);
1652 if (ITER_TYPE (iter) == BSON_TYPE_DOCUMENT) {
1653 memcpy (document_len, (iter->raw + iter->d1), sizeof (*document_len));
1655 *document = (iter->raw + iter->d1);
1703 bson_iter_array (const bson_iter_t *iter, /* IN */ argument
1707 BSON_ASSERT (iter);
1714 if (ITER_TYPE (iter) == BSON_TYPE_ARRAY) {
1715 memcpy (array_len, (iter->raw + iter->d1), sizeof (*array_len));
1717 *array = (iter->raw + iter->d1);
1784 bson_iter_visit_all (bson_iter_t *iter, /* INOUT */ argument
1792 BSON_ASSERT (iter);
1795 while (_bson_iter_next_internal (iter, &key, &bson_type, &unsupported)) {
1797 iter->err_off = iter->off;
1801 if (VISIT_BEFORE (iter, key, data)) {
1808 if (VISIT_DOUBLE (iter, key, bson_iter_double (iter), data)) {
1818 utf8 = bson_iter_utf8 (iter, &utf8_len);
1821 iter->err_off = iter->off;
1825 if (VISIT_UTF8 (iter, key, utf8_len, utf8, data)) {
1836 bson_iter_document (iter, &doclen, &docbuf);
1839 VISIT_DOCUMENT (iter, key, &b, data)) {
1850 bson_iter_array (iter, &doclen, &docbuf);
1853 && VISIT_ARRAY (iter, key, &b, data)) {
1864 bson_iter_binary (iter, &subtype, &binary_len, &binary);
1866 if (VISIT_BINARY (iter, key, subtype, binary_len, binary, data)) {
1873 if (VISIT_UNDEFINED (iter, key, data)) {
1880 if (VISIT_OID (iter, key, bson_iter_oid (iter), data)) {
1887 if (VISIT_BOOL (iter, key, bson_iter_bool (iter), data)) {
1894 if (VISIT_DATE_TIME (iter, key, bson_iter_date_time (iter), data)) {
1901 if (VISIT_NULL (iter, key, data)) {
1910 regex = bson_iter_regex (iter, &options);
1912 if (VISIT_REGEX (iter, key, regex, options, data)) {
1923 bson_iter_dbpointer (iter, &collection_len, &collection, &oid);
1925 if (VISIT_DBPOINTER (iter, key, collection_len, collection, oid,
1936 code = bson_iter_code (iter, &code_len);
1938 if (VISIT_CODE (iter, key, code_len, code, data)) {
1948 symbol = bson_iter_symbol (iter, &symbol_len);
1950 if (VISIT_SYMBOL (iter, key, symbol_len, symbol, data)) {
1963 code = bson_iter_codewscope (iter, &length, &doclen, &docbuf);
1966 VISIT_CODEWSCOPE (iter, key, length, code, &b, data)) {
1973 if (VISIT_INT32 (iter, key, bson_iter_int32 (iter), data)) {
1982 bson_iter_timestamp (iter, &timestamp, &increment);
1984 if (VISIT_TIMESTAMP (iter, key, timestamp, increment, data)) {
1991 if (VISIT_INT64 (iter, key, bson_iter_int64 (iter), data)) {
1999 bson_iter_decimal128 (iter, &dec);
2001 if (VISIT_DECIMAL128 (iter, key, &dec, data)) {
2008 if (VISIT_MAXKEY (iter, bson_iter_key_unsafe (iter), data)) {
2015 if (VISIT_MINKEY (iter, bson_iter_key_unsafe (iter), data)) {
2025 if (VISIT_AFTER (iter, bson_iter_key_unsafe (iter), data)) {
2030 if (iter->err_off) {
2034 visitor->visit_unsupported_type (iter, key, bson_type, data);
2038 VISIT_CORRUPT (iter, data);
2065 bson_iter_overwrite_bool (bson_iter_t *iter, /* IN */ argument
2068 BSON_ASSERT (iter);
2071 if (ITER_TYPE (iter) == BSON_TYPE_BOOL) {
2072 memcpy ((void *)(iter->raw + iter->d1), &value, 1);
2095 bson_iter_overwrite_int32 (bson_iter_t *iter, /* IN */ argument
2098 BSON_ASSERT (iter);
2100 if (ITER_TYPE (iter) == BSON_TYPE_INT32) {
2104 memcpy ((void *)(iter->raw + iter->d1), &value, sizeof (value));
2127 bson_iter_overwrite_int64 (bson_iter_t *iter, /* IN */ argument
2130 BSON_ASSERT (iter);
2132 if (ITER_TYPE (iter) == BSON_TYPE_INT64) {
2136 memcpy ((void *)(iter->raw + iter->d1), &value, sizeof (value));
2159 bson_iter_overwrite_double (bson_iter_t *iter, /* IN */ argument
2162 BSON_ASSERT (iter);
2164 if (ITER_TYPE (iter) == BSON_TYPE_DOUBLE) {
2166 memcpy ((void *)(iter->raw + iter->d1), &value, sizeof (value));
2188 bson_iter_overwrite_decimal128 (bson_iter_t *iter, /* IN */ argument
2191 BSON_ASSERT (iter);
2193 if (ITER_TYPE (iter) == BSON_TYPE_DECIMAL128) {
2198 memcpy ((void *)(iter->raw + iter->d1), data, sizeof (data));
2200 memcpy ((void *)(iter->raw + iter->d1), value, sizeof (*value));
2226 bson_iter_value (bson_iter_t *iter) /* IN */ argument
2230 BSON_ASSERT (iter);
2232 value = &iter->value;
2233 value->value_type = ITER_TYPE (iter);
2237 value->value.v_double = bson_iter_double (iter);
2241 (char *)bson_iter_utf8 (iter, &value->value.v_utf8.len);
2244 bson_iter_document (iter,
2249 bson_iter_array (iter,
2254 bson_iter_binary (iter,
2260 bson_oid_copy (bson_iter_oid (iter), &value->value.v_oid);
2263 value->value.v_bool = bson_iter_bool (iter);
2266 value->value.v_datetime = bson_iter_date_time (iter);
2270 iter,
2276 bson_iter_dbpointer (iter,
2286 iter,
2292 iter,
2298 iter,
2304 value->value.v_int32 = bson_iter_int32 (iter);
2307 bson_iter_timestamp (iter,
2312 value->value.v_int64 = bson_iter_int64 (iter);
2315 bson_iter_decimal128 (iter, &(value->value.v_decimal128));