MCPcopy Create free account
hub / github.com/apache/qpid-proton / pni_encoder_enter

Function pni_encoder_enter

c/src/core/encoder.c:255–342  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

253} conv_t;
254
255static int pni_encoder_enter(void *ctx, pn_data_t *data, pni_node_t *node)
256{
257 pn_encoder_t *encoder = (pn_encoder_t *) ctx;
258 pni_node_t *parent = pn_data_node(data, node->parent);
259 pn_atom_t *atom = &node->atom;
260 uint8_t code;
261 conv_t c;
262
263 /** In an array we don't write the code before each element, only the first. */
264 if (pn_is_in_array(data, parent, node)) {
265 code = pn_type2code(encoder, parent->type);
266 if (pn_is_first_in_array(data, parent, node)) {
267 pn_encoder_writef8(encoder, code);
268 }
269 } else {
270 code = pn_node2code(encoder, node);
271 // Omit trailing nulls for described lists
272 if (pn_is_in_described_list(data, parent, node)) {
273 if (code==PNE_NULL) {
274 encoder->null_count++;
275 } else {
276 // Output pending nulls, then the nodes code
277 for (unsigned i = 0; i<encoder->null_count; i++) {
278 pn_encoder_writef8(encoder, PNE_NULL);
279 }
280 encoder->null_count = 0;
281 pn_encoder_writef8(encoder, code);
282 }
283 } else {
284 pn_encoder_writef8(encoder, code);
285 }
286 }
287
288 switch (code) {
289 case PNE_DESCRIPTOR:
290 case PNE_NULL:
291 case PNE_TRUE:
292 case PNE_FALSE: return 0;
293 case PNE_BOOLEAN: pn_encoder_writef8(encoder, atom->u.as_bool); return 0;
294 case PNE_UBYTE: pn_encoder_writef8(encoder, atom->u.as_ubyte); return 0;
295 case PNE_BYTE: pn_encoder_writef8(encoder, atom->u.as_byte); return 0;
296 case PNE_USHORT: pn_encoder_writef16(encoder, atom->u.as_ushort); return 0;
297 case PNE_SHORT: pn_encoder_writef16(encoder, atom->u.as_short); return 0;
298 case PNE_UINT0: return 0;
299 case PNE_SMALLUINT: pn_encoder_writef8(encoder, atom->u.as_uint); return 0;
300 case PNE_UINT: pn_encoder_writef32(encoder, atom->u.as_uint); return 0;
301 case PNE_SMALLINT: pn_encoder_writef8(encoder, atom->u.as_int); return 0;
302 case PNE_INT: pn_encoder_writef32(encoder, atom->u.as_int); return 0;
303 case PNE_UTF32: pn_encoder_writef32(encoder, atom->u.as_char); return 0;
304 case PNE_ULONG0: return 0;
305 case PNE_ULONG: pn_encoder_writef64(encoder, atom->u.as_ulong); return 0;
306 case PNE_SMALLULONG: pn_encoder_writef8(encoder, atom->u.as_ulong); return 0;
307 case PNE_LONG: pn_encoder_writef64(encoder, atom->u.as_long); return 0;
308 case PNE_SMALLLONG: pn_encoder_writef8(encoder, atom->u.as_long); return 0;
309 case PNE_MS64: pn_encoder_writef64(encoder, atom->u.as_timestamp); return 0;
310 case PNE_FLOAT: c.f = atom->u.as_float; pn_encoder_writef32(encoder, c.i); return 0;
311 case PNE_DOUBLE: c.d = atom->u.as_double; pn_encoder_writef64(encoder, c.l); return 0;
312 case PNE_DECIMAL32: pn_encoder_writef32(encoder, atom->u.as_decimal32); return 0;

Callers

nothing calls this directly

Calls 15

pn_data_nodeFunction · 0.85
pn_is_in_arrayFunction · 0.85
pn_type2codeFunction · 0.85
pn_is_first_in_arrayFunction · 0.85
pn_encoder_writef8Function · 0.85
pn_node2codeFunction · 0.85
pn_is_in_described_listFunction · 0.85
pn_encoder_writef16Function · 0.85
pn_encoder_writef32Function · 0.85
pn_encoder_writef64Function · 0.85
pn_encoder_writef128Function · 0.85
pn_encoder_writev8Function · 0.85

Tested by

no test coverage detected