Next: Multithreading and Multiprocessor Issues
Up: Key/Value Tables
Previous: Convenience Routines
Contents
Table Iterators
In the examples up to now, the code, which wanted to get values from
the table, knew what the keys were. It's also useful to be able to
write generic code which can operate on a table without knowing the
keys. ``Table iterators'' (``iterators'', for short) are used for this.
An iterator is an abstraction of a pointer to a particular table entry.
Iterators are analogous to the DIR * pointers used by the POSIX
opendir() , readdir() , closedir() , and similar
functions, to Perl hash tables' each() , keys() ,
and values() , and to the C++ Standard Template Library's
forward iterators.
At any time, the entries in a table may be considered to be in some
arbitrary (implementation-defined) order; an iterator may be used to
walk through some or all of the table entries in this order. This
order is guaranteed to remain unchanged for any given table, so long
as no changes are made to that table, so long as no
Util_TableSet*() , Util_TableSet*Array() ,
Util_TableSetGeneric() , Util_TableSetGenericArray() ,
Util_TableSetString() , or Util_TableDeleteKey() calls
are made on that table (making such calls on other tables doesn't
matter). The order may change if there is any change in the table,
and it may differ even between different tables with identical key/value
contents (including those produced by Util_TableClone() ).part178
Any change in the table also invalidates all iterators pointing
anywhere in the table; using any such iterator is an error.
Multiple iterators may point into the same table; they all use the
same order, and (unlike in Perl) they're all independent.
The detailed function description
in the Reference Manual
for Util_TableItQueryKeyValueInfo() has an example of
using an iterator to print out all the entries in a table.
Next: Multithreading and Multiprocessor Issues
Up: Key/Value Tables
Previous: Convenience Routines
Contents
|