MCPcopy Create free account
hub / github.com/dhbloo/rapfi / parse_array

Function parse_array

Rapfi/external/cpptoml/include/cpptoml.h:2992–3043  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2990 }
2991
2992 std::shared_ptr<base> parse_array(std::string::iterator& it,
2993 std::string::iterator& end)
2994 {
2995 // this gets ugly because of the "homogeneity" restriction:
2996 // arrays can either be of only one type, or contain arrays
2997 // (each of those arrays could be of different types, though)
2998 //
2999 // because of the latter portion, we don't really have a choice
3000 // but to represent them as arrays of base values...
3001 ++it;
3002
3003 // ugh---have to read the first value to determine array type...
3004 skip_whitespace_and_comments(it, end);
3005
3006 // edge case---empty array
3007 if (*it == ']')
3008 {
3009 ++it;
3010 return make_array();
3011 }
3012
3013 auto val_end = std::find_if(
3014 it, end, [](char c) { return c == ',' || c == ']' || c == '#'; });
3015 parse_type type = determine_value_type(it, val_end);
3016 switch (type)
3017 {
3018 case parse_type::STRING:
3019 return parse_value_array<std::string>(it, end);
3020 case parse_type::LOCAL_TIME:
3021 return parse_value_array<local_time>(it, end);
3022 case parse_type::LOCAL_DATE:
3023 return parse_value_array<local_date>(it, end);
3024 case parse_type::LOCAL_DATETIME:
3025 return parse_value_array<local_datetime>(it, end);
3026 case parse_type::OFFSET_DATETIME:
3027 return parse_value_array<offset_datetime>(it, end);
3028 case parse_type::INT:
3029 return parse_value_array<int64_t>(it, end);
3030 case parse_type::FLOAT:
3031 return parse_value_array<double>(it, end);
3032 case parse_type::BOOL:
3033 return parse_value_array<bool>(it, end);
3034 case parse_type::ARRAY:
3035 return parse_object_array<array>(&parser::parse_array, '[', it,
3036 end);
3037 case parse_type::INLINE_TABLE:
3038 return parse_object_array<table_array>(
3039 &parser::parse_inline_table, '{', it, end);
3040 default:
3041 throw_parse_exception("Unable to parse array");
3042 }
3043 }
3044
3045 template <class Value>
3046 std::shared_ptr<array> parse_value_array(std::string::iterator& it,

Callers 1

parse_valueFunction · 0.85

Calls 4

make_arrayFunction · 0.85
determine_value_typeFunction · 0.85
throw_parse_exceptionFunction · 0.85

Tested by

no test coverage detected