BSON: Bugfix for non-empty arrays
This commit is contained in:
		
							parent
							
								
									cf485c2907
								
							
						
					
					
						commit
						df33a90774
					
				
					 3 changed files with 55 additions and 54 deletions
				
			
		|  | @ -157,17 +157,21 @@ class binary_reader | |||
|         return success; | ||||
|     } | ||||
| 
 | ||||
|     void parse_bson_entries() | ||||
|     void parse_bson_entries(bool is_array) | ||||
|     { | ||||
|         while (auto entry_type = get()) | ||||
|         { | ||||
|             string_t key; | ||||
|             get_bson_cstr(key); | ||||
|             if (!is_array) | ||||
|             { | ||||
|                 sax->key(key); | ||||
|             } | ||||
| 
 | ||||
|             switch (entry_type) | ||||
|             { | ||||
|                 case 0x01: // double
 | ||||
|                 { | ||||
|                     string_t key; | ||||
|                     get_bson_cstr(key); | ||||
|                     sax->key(key); | ||||
|                     double number; | ||||
|                     get_number_little_endian(number); | ||||
|                     sax->number_float(static_cast<number_float_t>(number), ""); | ||||
|  | @ -175,9 +179,6 @@ class binary_reader | |||
|                 break; | ||||
|                 case 0x02: // string
 | ||||
|                 { | ||||
|                     string_t key; | ||||
|                     get_bson_cstr(key); | ||||
|                     sax->key(key); | ||||
|                     std::int32_t len; | ||||
|                     string_t value; | ||||
|                     get_number_little_endian(len); | ||||
|  | @ -188,17 +189,11 @@ class binary_reader | |||
|                 break; | ||||
|                 case 0x08: // boolean
 | ||||
|                 { | ||||
|                     string_t key; | ||||
|                     get_bson_cstr(key); | ||||
|                     sax->key(key); | ||||
|                     sax->boolean(static_cast<bool>(get())); | ||||
|                 } | ||||
|                 break; | ||||
|                 case 0x10: // int32
 | ||||
|                 { | ||||
|                     string_t key; | ||||
|                     get_bson_cstr(key); | ||||
|                     sax->key(key); | ||||
|                     std::int32_t value; | ||||
|                     get_number_little_endian(value); | ||||
|                     sax->number_integer(static_cast<std::int32_t>(value)); | ||||
|  | @ -206,9 +201,6 @@ class binary_reader | |||
|                 break; | ||||
|                 case 0x12: // int64
 | ||||
|                 { | ||||
|                     string_t key; | ||||
|                     get_bson_cstr(key); | ||||
|                     sax->key(key); | ||||
|                     std::int64_t value; | ||||
|                     get_number_little_endian(value); | ||||
|                     sax->number_integer(static_cast<std::int64_t>(value)); | ||||
|  | @ -216,25 +208,16 @@ class binary_reader | |||
|                 break; | ||||
|                 case 0x0A: // null
 | ||||
|                 { | ||||
|                     string_t key; | ||||
|                     get_bson_cstr(key); | ||||
|                     sax->key(key); | ||||
|                     sax->null(); | ||||
|                 } | ||||
|                 break; | ||||
|                 case 0x03: // object
 | ||||
|                 { | ||||
|                     string_t key; | ||||
|                     get_bson_cstr(key); | ||||
|                     sax->key(key); | ||||
|                     parse_bson_internal(); | ||||
|                 } | ||||
|                 break; | ||||
|                 case 0x04: // array
 | ||||
|                 { | ||||
|                     string_t key; | ||||
|                     get_bson_cstr(key); | ||||
|                     sax->key(key); | ||||
|                     parse_bson_array(); | ||||
|                 } | ||||
|                 break; | ||||
|  | @ -252,7 +235,7 @@ class binary_reader | |||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         parse_bson_entries(); | ||||
|         parse_bson_entries(/*is_array*/true); | ||||
| 
 | ||||
|         const auto result = sax->end_array(); | ||||
| 
 | ||||
|  | @ -269,7 +252,7 @@ class binary_reader | |||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         parse_bson_entries(); | ||||
|         parse_bson_entries(/*is_array*/false); | ||||
| 
 | ||||
|         const auto result = sax->end_object(); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue