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); } }
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; }