25 #ifndef PAYLOAD_H_INCLUDED
26 #define PAYLOAD_H_INCLUDED
43 #define NVHANDLE_MAX_VALUE ((NVHandle)-1)
78 NVRegistry *
nv_registry_new(
const gchar **static_names, guint32 nvhandle_max_value);
82 nv_registry_get_handle_flags(NVRegistry *
self,
NVHandle handle)
86 if (G_UNLIKELY(!handle))
93 static inline const gchar *
94 nv_registry_get_handle_name(NVRegistry *
self,
NVHandle handle, gssize *length)
98 if (G_UNLIKELY(!handle))
105 if (handle - 1 >=
self->names->len)
113 if (G_LIKELY(length))
114 *length = stored->name_len;
118 typedef struct _NVReferencedSlice
195 #define NV_ENTRY_DIRECT_HDR ((gsize) (&((NVEntry *) NULL)->vdirect.data))
196 #define NV_ENTRY_DIRECT_SIZE(name_len, value_len) ((value_len) + NV_ENTRY_DIRECT_HDR + (name_len) + 2)
197 #define NV_ENTRY_INDIRECT_HDR (sizeof(NVEntry))
198 #define NV_ENTRY_INDIRECT_SIZE(name_len) (NV_ENTRY_INDIRECT_HDR + name_len + 1)
200 static inline const gchar *
201 nv_entry_get_name(NVEntry *
self)
204 return self->vindirect.name;
206 return self->vdirect.data;
289 #define NV_TABLE_BOUND(x) (((x) + 0x3) & ~0x3)
290 #define NV_TABLE_ADDR(self, x) ((gchar *) ((self)) + ((gssize)(x)))
294 #define NV_TABLE_MAX_BYTES (256*1024*1024)
298 #define NV_TABLE_MIN_BYTES 128
301 const gchar *
name, gsize name_len,
302 const gchar *
value, gsize value_len,
303 NVType type, gboolean *new_entry);
306 const gchar *
name, gsize name_len,
308 NVType type, gboolean *new_entry);
313 NVTable *
nv_table_new(gint num_static_values, gint index_size_hint, gint init_length);
321 static inline gboolean
322 nv_table_is_handle_static(NVTable *
self,
NVHandle handle)
324 return (handle <= self->num_static_entries);
328 nv_table_get_alloc_size(gint num_static_entries, gint index_size_hint, gint init_length)
330 NVTable *
self G_GNUC_UNUSED = NULL;
334 self->static_entries[0]) + index_size_hint *
sizeof(NVIndexEntry));
342 static inline gchar *
343 nv_table_get_top(NVTable *
self)
348 static inline gchar *
349 nv_table_get_bottom(NVTable *
self)
351 return nv_table_get_top(
self) -
self->used;
354 static inline gchar *
355 nv_table_get_ofs_table_top(NVTable *
self)
357 return (gchar *) &
self->data[
self->num_static_entries *
sizeof(
self->static_entries[0]) +
358 self->index_size *
sizeof(NVIndexEntry)];
361 static inline gboolean
362 nv_table_alloc_check(NVTable *
self, gsize alloc_size)
364 if ((gsize)(nv_table_get_bottom(
self) - nv_table_get_ofs_table_top(
self)) < alloc_size)
374 static inline NVEntry *
375 __nv_table_get_entry(NVTable *
self,
NVHandle handle, guint16 num_static_entries, NVIndexEntry **index_entry,
376 NVIndexEntry **index_slot)
379 NVIndexEntry *t1, *t2;
386 if (G_UNLIKELY(!handle))
393 if (G_LIKELY(nv_table_is_handle_static(
self, handle)))
395 ofs =
self->static_entries[handle - 1];
398 if (G_UNLIKELY(!ofs))
400 return (NVEntry *) (nv_table_get_top(
self) - ofs);
408 static inline NVEntry *
409 nv_table_get_entry(NVTable *
self,
NVHandle handle, NVIndexEntry **index_entry, NVIndexEntry **index_slot)
411 return __nv_table_get_entry(
self, handle,
self->num_static_entries, index_entry, index_slot);
414 static inline gboolean
415 nv_table_is_value_set(NVTable *
self,
NVHandle handle)
417 return nv_table_get_entry(
self, handle, NULL, NULL) != NULL;
420 static inline const gchar *
421 nv_table_get_value(NVTable *
self,
NVHandle handle, gssize *length,
NVType *type)
425 entry = nv_table_get_entry(
self, handle, NULL, NULL);
426 if (!entry || entry->unset)
435 if (!entry->indirect)
438 *length = entry->vdirect.value_len;
439 return entry->vdirect.data + entry->name_len + 1;
444 static inline NVIndexEntry *
445 nv_table_get_index(NVTable *
self)
447 return (NVIndexEntry *)&
self->static_entries[
self->num_static_entries];
450 static inline NVEntry *
451 nv_table_get_entry_at_ofs(NVTable *
self, guint32 ofs)
455 return (NVEntry *)(nv_table_get_top(
self) - ofs);
458 static inline guint32
459 nv_table_get_ofs_for_an_entry(NVTable *
self, NVEntry *entry)
461 return (nv_table_get_top(
self) - (gchar *) entry);
465 nv_table_get_memory_consumption(NVTable *
self)
467 return sizeof(*self) +
468 self->num_static_entries *
sizeof(
self->static_entries[0]) +
const gchar * name
Definition: debugger.c:265
#define nvhandle_desc_array_index(self, i)
Definition: nvhandle-descriptors.h:50
NVHandle nv_registry_get_handle(NVRegistry *self, const gchar *name)
Definition: nvtable.c:35
#define NV_TABLE_BOUND(x)
Definition: nvtable.h:289
NVRegistry * nv_registry_new(const gchar **static_names, guint32 nvhandle_max_value)
Definition: nvtable.c:143
NVTable * nv_table_clone(NVTable *self, gint additional_space)
Definition: nvtable.c:812
NVTable * nv_table_new(gint num_static_values, gint index_size_hint, gint init_length)
Definition: nvtable.c:720
void nv_registry_add_alias(NVRegistry *self, NVHandle handle, const gchar *alias)
Definition: nvtable.c:101
void nv_table_unref(NVTable *self)
Definition: nvtable.c:796
const gchar * nv_table_resolve_indirect(NVTable *self, NVEntry *entry, gssize *len)
Definition: nvtable.c:197
void nv_registry_assert_next_handle(NVRegistry *self, NVHandle handle)
Definition: nvtable.c:117
void nv_registry_set_handle_flags(NVRegistry *self, NVHandle handle, guint16 flags)
Definition: nvtable.c:125
gboolean nv_table_foreach_entry(NVTable *self, NVTableForeachEntryFunc func, gpointer user_data)
Definition: nvtable.c:675
guint8 NVType
Definition: nvtable.h:36
gboolean nv_table_foreach(NVTable *self, NVRegistry *registry, NVTableForeachFunc func, gpointer user_data)
Definition: nvtable.c:667
void nv_registry_foreach(NVRegistry *self, GHFunc callback, gpointer user_data)
Definition: nvtable.c:137
gboolean nv_table_add_value(NVTable *self, NVHandle handle, const gchar *name, gsize name_len, const gchar *value, gsize value_len, NVType type, gboolean *new_entry)
Definition: nvtable.c:450
NVHandle nv_registry_alloc_handle(NVRegistry *self, const gchar *name)
Definition: nvtable.c:46
gboolean nv_table_add_value_indirect(NVTable *self, NVHandle handle, const gchar *name, gsize name_len, NVReferencedSlice *referenced_slice, NVType type, gboolean *new_entry)
Definition: nvtable.c:586
#define NV_TABLE_ADDR(self, x)
Definition: nvtable.h:290
void nv_registry_free(NVRegistry *self)
Definition: nvtable.c:159
gboolean(* NVTableForeachFunc)(NVHandle handle, const gchar *name, const gchar *value, gssize value_len, NVType type, gpointer user_data)
Definition: nvtable.h:37
NVTable * nv_table_compact(NVTable *self)
Definition: nvtable.c:898
#define NV_TABLE_MAX_BYTES
Definition: nvtable.h:294
const gchar * null_string
Definition: nvtable.c:32
NVTable * nv_table_ref(NVTable *self)
Definition: nvtable.c:789
gboolean(* NVTableForeachEntryFunc)(NVHandle handle, NVEntry *entry, NVIndexEntry *index_entry, gpointer user_data)
Definition: nvtable.h:40
NVTable * nv_table_init_borrowed(gpointer space, gsize space_len, gint num_static_entries)
Definition: nvtable.c:733
guint32 NVHandle
Definition: nvtable.h:35
gboolean nv_table_realloc(NVTable *self, NVTable **new_nv_table)
Definition: nvtable.c:746
void nv_registry_add_predefined(NVRegistry *self, NVHandle handle, const gchar *name)
Definition: nvtable.c:109
#define NV_TABLE_MIN_BYTES
Definition: nvtable.h:298
NVEntry * nv_table_get_entry_slow(NVTable *self, NVHandle handle, NVIndexEntry **index_entry, NVIndexEntry **index_slot)
Definition: nvtable.c:314
gboolean nv_table_unset_value(NVTable *self, NVHandle handle)
Definition: nvtable.c:507
#define self
Definition: rcptid.c:38
Definition: nvhandle-descriptors.h:38
Definition: nvtable.h:119
guint32 ofs
Definition: nvtable.h:121
NVHandle handle
Definition: nvtable.h:120
guint32 len
Definition: nvtable.h:122
Definition: nvtable.h:129
guint8 type_present
Definition: nvtable.h:150
guint8 unset
Definition: nvtable.h:149
guint8 __bit_padding
Definition: nvtable.h:151
guint8 referenced
Definition: nvtable.h:148
struct _NVEntry::@44::@49 vindirect
guint8 __reserved
Definition: nvtable.h:162
guint32 value_len
Definition: nvtable.h:168
guint8 name_len
Definition: nvtable.h:155
guint32 len
Definition: nvtable.h:177
guint32 alloc_len
Definition: nvtable.h:163
gchar name[0]
Definition: nvtable.h:190
NVHandle handle
Definition: nvtable.h:175
guint8 flags
Definition: nvtable.h:153
struct _NVEntry::@44::@48 vdirect
guint8 indirect
Definition: nvtable.h:147
guint32 ofs
Definition: nvtable.h:176
NVType type
Definition: nvtable.h:156
guint8 __deprecated_type_field
Definition: nvtable.h:188
gchar data[]
Definition: nvtable.h:170
NVHandle handle
Definition: nvtable.h:56
guint32 ofs
Definition: nvtable.h:57
NVHandleDescArray * names
Definition: nvtable.h:64
GHashTable * name_map
Definition: nvtable.h:65
guint32 nvhandle_max_value
Definition: nvtable.h:66
gint num_static_names
Definition: nvtable.h:63
Definition: nvtable.h:267
guint16 index_size
Definition: nvtable.h:275
guint32 size
Definition: nvtable.h:269
guint32 static_entries[0]
Definition: nvtable.h:284
guint8 num_static_entries
Definition: nvtable.h:276
guint8 ref_cnt
Definition: nvtable.h:277
guint32 used
Definition: nvtable.h:270
guint32 __dummy_for_alignment
Definition: nvtable.h:283
gchar data[0]
Definition: nvtable.h:285
guint8 borrowed
Definition: nvtable.h:278
GString * value
Definition: test_decode.c:28