MCPcopy Create free account
hub / github.com/defold/defold / DoLoadMessage

Function DoLoadMessage

engine/ddf/src/ddf/ddf_load.cpp:150–238  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

148 }
149
150 Result DoLoadMessage(LoadContext* load_context, InputBuffer* input_buffer,
151 const Descriptor* desc, Message* message)
152 {
153 uint8_t read_fields[DDF_MAX_FIELDS];
154 memset(read_fields, 0, sizeof(read_fields));
155
156 for (int i = 0; i < desc->m_FieldCount; ++i)
157 {
158 const FieldDescriptor* f = &desc->m_Fields[i];
159 if (f->m_Label == LABEL_REPEATED)
160 {
161 // TODO: Verify buffer_pos!!!! Correct to use Tell()?
162 uint32_t buffer_pos = input_buffer->Tell();
163 message->AllocateRepeatedBuffer(load_context, f, load_context->GetArrayCount(buffer_pos, f->m_Number));
164 }
165 }
166
167 while (!input_buffer->Eof())
168 {
169 uint32_t tag;
170 if (input_buffer->ReadVarInt32(&tag))
171 {
172 uint32_t key = tag >> 3;
173 uint32_t type = tag & 0x7;
174
175 if (key == 0)
176 {
177 return RESULT_WIRE_FORMAT_ERROR;
178 }
179
180 uint32_t field_index;
181 const FieldDescriptor* field = FindField(desc, key, &field_index);
182
183 if (!field)
184 {
185 // TODO: FIELD NOT FOUND. HOW TO HANDLE?!?!
186 Result e = SkipField(input_buffer, type);
187 if (e != RESULT_OK)
188 {
189 return e;
190 }
191 continue;
192 }
193 else
194 {
195 assert(field_index < DDF_MAX_FIELDS);
196 read_fields[field_index] = 1;
197
198 Result e;
199 e = message->ReadField(load_context, (WireType) type, field, input_buffer);
200 if (e != RESULT_OK)
201 {
202 return e;
203 }
204
205 if (field->m_OneOfIndex != DDF_NO_ONE_OF_INDEX)
206 {
207 message->SetOneOf(desc, field);

Callers 2

LoadMessageFunction · 0.85
ReadMessageFieldMethod · 0.85

Calls 11

SkipFieldFunction · 0.85
DoLoadDefaultFieldFunction · 0.85
TellMethod · 0.80
GetArrayCountMethod · 0.80
EofMethod · 0.80
ReadVarInt32Method · 0.80
ReadFieldMethod · 0.80
SetOneOfMethod · 0.80
FindFieldFunction · 0.70
assertFunction · 0.50

Tested by

no test coverage detected