]> git.proxmox.com Git - libgit2.git/commit
Improved tree iterator internals
authorRussell Belfer <rb@github.com>
Thu, 14 Mar 2013 20:40:15 +0000 (13:40 -0700)
committerRussell Belfer <rb@github.com>
Thu, 14 Mar 2013 20:40:15 +0000 (13:40 -0700)
commit0c46863384e9da3746b90ddf81eef6d25d475e5c
treecdfab3b18acdea8fc69a8b8472f5c29c54a06f10
parent6950dca42ea15d2a766131464935a1c4d8bd11b2
Improved tree iterator internals

This updates the tree iterator internals to be more efficient.

The tree_iterator_entry objects are now kept as pointers that are
allocated from a git_pool, so that we may use git__tsort_r for
sorting (which is better than qsort, given that the tree is
likely mostly ordered already).

Those tree_iterator_entry objects now keep direct pointers to the
data they refer to instead of keeping indirect index values.  This
simplifies a lot of the data structure traversal code.

This also adds bsearch to find the start item position for range-
limited tree iterators, and is more explicit about using
git_path_cmp instead of reimplementing it.  The git_path_cmp
changed a bit to make it easier for tree_iterators to use it (but
it was barely being used previously, so not a big deal).

This adds a git_pool_free_array function that efficiently frees a
list of pool allocated pointers (which the tree_iterator keeps).
Also, added new tests for the git_pool free list functionality
that was not previously being tested (or used).
src/iterator.c
src/path.c
src/path.h
src/pool.c
src/pool.h
src/tree.c
tests-clar/core/pool.c