Example #1
0
const gchar *
_get_entry_name(NVTable *self, NVDynValue *dyn_entry)
{
  NVEntry *entry = nv_table_get_entry_at_ofs(self, dyn_entry->ofs);
  if (!entry)
    return NULL;
  return nv_entry_get_name(entry);
}
Example #2
0
static void
_update_all_indirect_entries(NVTable *self, NVRegistry *logmsg_nv_registry)
{
  int i;
  NVDynValue *dyn_entries = nv_table_get_dyn_entries(self);

  for (i = 0; i < self->num_dyn_entries; i++)
    {
      NVEntry *entry = nv_table_get_entry_at_ofs(self, NV_TABLE_DYNVALUE_OFS(dyn_entries[i]));

      if (_is_indirect(entry))
        _update_indirect_entry(self, logmsg_nv_registry, entry);
    }
}
Example #3
0
NVEntry *
nv_table_get_entry_slow(NVTable *self, NVHandle handle, NVDynValue **dyn_slot)
{
  guint32 ofs;
  gint l, h, m;
  NVDynValue *dyn_entries = nv_table_get_dyn_entries(self);
  guint32 mv;

  if (!self->num_dyn_entries)
    {
      *dyn_slot = NULL;
      return NULL;
    }

  /* open-coded binary search */
  *dyn_slot = NULL;
  l = 0;
  h = self->num_dyn_entries - 1;
  ofs = 0;
  while (l <= h)
    {
      m = (l+h) >> 1;
      mv = NV_TABLE_DYNVALUE_HANDLE(dyn_entries[m]);
      if (mv == handle)
        {
          *dyn_slot = &dyn_entries[m];
          ofs = NV_TABLE_DYNVALUE_OFS(dyn_entries[m]);
          break;
        }
      else if (mv > handle)
        {
          h = m - 1;
        }
      else
        {
          l = m + 1;
        }
    }

  NVEntry *entry = nv_table_get_entry_at_ofs(self, ofs);
  return entry;
}