| sha1-array API | 
 | ============== | 
 |  | 
 | The sha1-array API provides storage and manipulation of sets of SHA-1 | 
 | identifiers. The emphasis is on storage and processing efficiency, | 
 | making them suitable for large lists. Note that the ordering of items is | 
 | not preserved over some operations. | 
 |  | 
 | Data Structures | 
 | --------------- | 
 |  | 
 | `struct sha1_array`:: | 
 |  | 
 | 	A single array of SHA-1 hashes. This should be initialized by | 
 | 	assignment from `SHA1_ARRAY_INIT`.  The `sha1` member contains | 
 | 	the actual data. The `nr` member contains the number of items in | 
 | 	the set.  The `alloc` and `sorted` members are used internally, | 
 | 	and should not be needed by API callers. | 
 |  | 
 | Functions | 
 | --------- | 
 |  | 
 | `sha1_array_append`:: | 
 | 	Add an item to the set. The sha1 will be placed at the end of | 
 | 	the array (but note that some operations below may lose this | 
 | 	ordering). | 
 |  | 
 | `sha1_array_lookup`:: | 
 | 	Perform a binary search of the array for a specific sha1. | 
 | 	If found, returns the offset (in number of elements) of the | 
 | 	sha1. If not found, returns a negative integer. If the array is | 
 | 	not sorted, this function has the side effect of sorting it. | 
 |  | 
 | `sha1_array_clear`:: | 
 | 	Free all memory associated with the array and return it to the | 
 | 	initial, empty state. | 
 |  | 
 | `sha1_array_for_each_unique`:: | 
 | 	Efficiently iterate over each unique element of the list, | 
 | 	executing the callback function for each one. If the array is | 
 | 	not sorted, this function has the side effect of sorting it. | 
 |  | 
 | Examples | 
 | -------- | 
 |  | 
 | ----------------------------------------- | 
 | void print_callback(const unsigned char sha1[20], | 
 | 		    void *data) | 
 | { | 
 | 	printf("%s\n", sha1_to_hex(sha1)); | 
 | } | 
 |  | 
 | void some_func(void) | 
 | { | 
 | 	struct sha1_array hashes = SHA1_ARRAY_INIT; | 
 | 	unsigned char sha1[20]; | 
 |  | 
 | 	/* Read objects into our set */ | 
 | 	while (read_object_from_stdin(sha1)) | 
 | 		sha1_array_append(&hashes, sha1); | 
 |  | 
 | 	/* Check if some objects are in our set */ | 
 | 	while (read_object_from_stdin(sha1)) { | 
 | 		if (sha1_array_lookup(&hashes, sha1) >= 0) | 
 | 			printf("it's in there!\n"); | 
 |  | 
 | 	/* | 
 | 	 * Print the unique set of objects. We could also have | 
 | 	 * avoided adding duplicate objects in the first place, | 
 | 	 * but we would end up re-sorting the array repeatedly. | 
 | 	 * Instead, this will sort once and then skip duplicates | 
 | 	 * in linear time. | 
 | 	 */ | 
 | 	sha1_array_for_each_unique(&hashes, print_callback, NULL); | 
 | } | 
 | ----------------------------------------- |