string_pool API
===============

The string_pool API provides facilities for replacing strings
with integer keys that can be more easily compared and stored.
The facilities are designed so that one could teach Git without
too much trouble to store the information needed for these keys to
remain valid over multiple executions.

Functions
---------

pool_intern::
	Include a string in the string pool and get its key.
	If that string is already in the pool, retrieves its
	existing key.

pool_fetch::
	Retrieve the string associated to a given key.

pool_tok_r::
	Extract the key of the next token from a string.
	Interface mimics strtok_r.

pool_print_seq::
	Print a sequence of strings named by key to a file, using the
	specified delimiter to separate them.

	If NULL (key ~0) appears in the sequence, the sequence ends
	early.

pool_tok_seq::
	Split a string into tokens, storing the keys of segments
	into a caller-provided array.

	Unless sz is 0, the array will always be ~0-terminated.
	If there is not enough room for all the tokens, the
	array holds as many tokens as fit in the entries before
	the terminating ~0.  Return value is the index after the
	last token, or sz if the tokens did not fit.

pool_reset::
	Deallocate storage for the string pool.
