// size/iterator std::size_t node_data::size() const { if(!m_isDefined) return 0; switch(m_type) { case NodeType::Sequence: compute_seq_size(); return m_seqSize; case NodeType::Map: compute_map_size(); return m_map.size() - m_undefinedPairs.size(); default: return 0; } return 0; }
static void element_end(GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **err) { struct context_data *ctx_data = user_data; struct sdp_xml_data *elem; if (!strcmp(element_name, "record")) return; if (!strcmp(element_name, "attribute")) { if (ctx_data->stack_head && ctx_data->stack_head->data) { int ret = sdp_attr_add(ctx_data->record, ctx_data->attr_id, ctx_data->stack_head->data); if (ret == -1) DBG("Could not add attribute 0x%04x", ctx_data->attr_id); ctx_data->stack_head->data = NULL; sdp_xml_data_free(ctx_data->stack_head); ctx_data->stack_head = NULL; } else { DBG("No data for attribute 0x%04x", ctx_data->attr_id); } return; } if (!strcmp(element_name, "sequence")) { ctx_data->stack_head->data->unitSize = compute_seq_size(ctx_data->stack_head->data); if (ctx_data->stack_head->data->unitSize > USHRT_MAX) { ctx_data->stack_head->data->unitSize += sizeof(uint32_t); ctx_data->stack_head->data->dtd = SDP_SEQ32; } else if (ctx_data->stack_head->data->unitSize > UCHAR_MAX) { ctx_data->stack_head->data->unitSize += sizeof(uint16_t); ctx_data->stack_head->data->dtd = SDP_SEQ16; } else { ctx_data->stack_head->data->unitSize += sizeof(uint8_t); } } else if (!strcmp(element_name, "alternate")) { ctx_data->stack_head->data->unitSize = compute_seq_size(ctx_data->stack_head->data); if (ctx_data->stack_head->data->unitSize > USHRT_MAX) { ctx_data->stack_head->data->unitSize += sizeof(uint32_t); ctx_data->stack_head->data->dtd = SDP_ALT32; } else if (ctx_data->stack_head->data->unitSize > UCHAR_MAX) { ctx_data->stack_head->data->unitSize += sizeof(uint16_t); ctx_data->stack_head->data->dtd = SDP_ALT16; } else { ctx_data->stack_head->data->unitSize += sizeof(uint8_t); } } if (ctx_data->stack_head->next && ctx_data->stack_head->data && ctx_data->stack_head->next->data) { switch (ctx_data->stack_head->next->data->dtd) { case SDP_SEQ8: case SDP_SEQ16: case SDP_SEQ32: case SDP_ALT8: case SDP_ALT16: case SDP_ALT32: ctx_data->stack_head->next->data->val.dataseq = sdp_seq_append(ctx_data->stack_head->next->data->val.dataseq, ctx_data->stack_head->data); ctx_data->stack_head->data = NULL; break; } elem = ctx_data->stack_head; ctx_data->stack_head = ctx_data->stack_head->next; sdp_xml_data_free(elem); } }
static void element_log(sdp_data_t * d ) { switch (d->dtd) { case SDP_DATA_NIL: break; case SDP_UINT8: debug("Type = SDP_UINT8 len = %d value = 0x%x", sizeof(uint8_t),d->val.uint8); break; case SDP_UINT16: debug("Type = SDP_UINT16 len = %d value = 0x%x", sizeof(uint16_t),d->val.uint16); break; case SDP_UINT32: debug("Type = SDP_UINT32 len = %d value = 0x%x", sizeof(uint32_t),d->val.uint32); break; case SDP_UINT64: debug("Type = SDP_UINT64 len = %d value = 0x%x", sizeof(uint64_t),d->val.uint64); break; case SDP_UINT128: debug("Type = SDP_UINT128 len = %d value = 0x%x", sizeof(uint128_t),d->val.uint128); break; case SDP_INT8: case SDP_BOOL: debug("Type = SDP_INT8 len = %d value = 0x%x", sizeof(int8_t),d->val.int8); break; case SDP_INT16: debug("Type = SDP_INT16 len = %d value = 0x%x", sizeof(int16_t),d->val.int16); break; case SDP_INT32: debug("Type = SDP_INT32 len = %d value = 0x%x", sizeof(int32_t),d->val.int32); break; case SDP_INT64: debug("Type = SDP_INT64 len = %d value = 0x%x", sizeof(int64_t),d->val.int64); break; case SDP_INT128: debug("Type = SDP_INT128 len = %d value = 0x%x", sizeof(uint128_t),d->val.int128); break; case SDP_TEXT_STR8: case SDP_TEXT_STR16: case SDP_TEXT_STR32: case SDP_URL_STR8: case SDP_URL_STR16: case SDP_URL_STR32: debug("Type = SDP_TEXT_STR8 len = %d value = %s", d->unitSize - sizeof(uint8_t),d->val.str); break; case SDP_SEQ8: case SDP_SEQ16: case SDP_SEQ32: debug("Type = SDP_SEQ8 len = %d ", compute_seq_size(d)); break; case SDP_ALT8: case SDP_ALT16: case SDP_ALT32: debug("Type = SDP_ALT8 len = %d ", compute_seq_size(d)); break; case SDP_UUID16: debug("Type = SDP_UUID16 len = %d 0x%x", sizeof(uint16_t),d->val.uuid.value.uuid16 ); break; case SDP_UUID32: debug("Type = SDP_UUID32 len = %d 0x%x", sizeof(uint32_t),d->val.uuid.value.uuid32 ); break; case SDP_UUID128: debug("Type = SDP_UUID128 len = %d 0x%x", sizeof(uint128_t),d->val.uuid.value.uuid128 ); break; default: break; } }