MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / parse_object

Method parse_object

lite/load_and_run/src/helpers/json_loader.cpp:88–143  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

86}
87
88std::unique_ptr<JsonLoader::Value> JsonLoader::parse_object() {
89 expect('{');
90 skip_whitespace();
91
92 std::unique_ptr<JsonLoader::Value> ret;
93 std::unique_ptr<JsonLoader::ObjectValue> pObject =
94 std::make_unique<JsonLoader::ObjectValue>();
95
96 if ('}' == *m_buf) {
97 m_buf = m_buf + 1;
98 ret = std::move(pObject);
99 return ret;
100 }
101
102 while (true) {
103 std::unique_ptr<JsonLoader::Value> key = parse_string();
104 if (m_state != State::OK) {
105 return ret;
106 }
107
108 skip_whitespace();
109 if (':' != (*m_buf)) {
110 m_state = State::MISS_COLON;
111 return ret;
112 }
113 m_buf++;
114 skip_whitespace();
115
116 std::unique_ptr<JsonLoader::Value> pVal = parse_value();
117 if (m_state != State::OK) {
118 return ret;
119 }
120
121 if (pObject->m_obj.find(pVal->str()) != pObject->m_obj.end()) {
122 m_state = State::KEY_NOT_UNIQUE;
123 return ret;
124 }
125
126 pObject->m_obj.insert(std::make_pair(key->str(), std::move(pVal)));
127 pObject->m_keys.push_back(key->str());
128
129 skip_whitespace();
130 if (',' == (*m_buf)) {
131 m_buf++;
132 skip_whitespace();
133 } else if ('}' == (*m_buf)) {
134 m_buf++;
135 break;
136 } else {
137 m_state = State::MISS_BRACE;
138 break;
139 }
140 }
141 ret = std::move(pObject);
142 return ret;
143}
144
145std::unique_ptr<JsonLoader::Value> JsonLoader::parse_array() {

Callers

nothing calls this directly

Calls 5

findMethod · 0.45
strMethod · 0.45
endMethod · 0.45
insertMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected