1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-11-16 06:03:44 +01:00
git/Documentation
Karsten Blees 6a364ced49 add a hashtable implementation that supports O(1) removal
The existing hashtable implementation (in hash.[ch]) uses open addressing
(i.e. resolve hash collisions by distributing entries across the table).
Thus, removal is difficult to implement with less than O(n) complexity.
Resolving collisions of entries with identical hashes (e.g. via chaining)
is left to the client code.

Add a hashtable implementation that supports O(1) removal and is slightly
easier to use due to builtin entry chaining.

Supports all basic operations init, free, get, add, remove and iteration.

Also includes ready-to-use hash functions based on the public domain FNV-1
algorithm (http://www.isthe.com/chongo/tech/comp/fnv).

The per-entry data structure (hashmap_entry) is piggybacked in front of
the client's data structure to save memory. See test-hashmap.c for usage
examples.

The hashtable is resized by a factor of four when 80% full. With these
settings, average memory consumption is about 2/3 of hash.[ch], and
insertion is about twice as fast due to less frequent resizing.

Lookups are also slightly faster, because entries are strictly confined to
their bucket (i.e. no data of other buckets needs to be traversed).

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-11-18 13:03:51 -08:00
..
howto Merge branch 'rj/doc-formatting-fix' 2013-10-14 11:07:50 -07:00
RelNotes Update draft release notes to 1.8.5 2013-10-17 15:57:12 -07:00
technical add a hashtable implementation that supports O(1) removal 2013-11-18 13:03:51 -08:00
.gitattributes
.gitignore doc: generate a list of valid merge tools 2013-02-02 21:46:52 -08:00
asciidoc.conf Documentation: avoid poor-man's small caps GIT 2013-02-01 13:53:25 -08:00
blame-options.txt blame: document multiple -L support 2013-08-06 14:34:43 -07:00
build-docdep.perl
cat-texi.perl Documentation: Strip texinfo anchors to avoid duplicates 2013-04-03 16:14:19 -07:00
cmd-list.perl
CodingGuidelines CodingGuidelines: style for multi-line comments 2013-10-14 12:48:06 -07:00
config.txt Merge branch 'jk/upload-pack-keepalive' into maint 2013-10-17 15:46:01 -07:00
date-formats.txt
diff-config.txt Improve documentation concerning the status.submodulesummary setting 2013-09-11 12:20:41 -07:00
diff-format.txt
diff-generate-patch.txt
diff-options.txt Merge branch 'mm/diff-no-patch-synonym-to-s' 2013-07-22 11:23:27 -07:00
docbook-xsl.css
docbook.xsl
everyday.txt Documentation: make AsciiDoc links always point to HTML files 2013-09-06 14:49:06 -07:00
fetch-options.txt Merge branch 'rr/maint-fetch-tag-doc-asterisks' into maint 2013-07-21 22:51:45 -07:00
fix-texi.perl
git-add.txt git add: --ignore-removal is a better named --no-all 2013-04-22 13:34:31 -07:00
git-am.txt am: replace uses of --resolved with --continue 2013-06-27 09:37:12 -07:00
git-annotate.txt
git-apply.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-archimport.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-archive.txt documentation: trivial style cleanups 2013-05-17 12:09:21 -07:00
git-bisect-lk2009.txt typofix: documentation 2013-07-22 16:06:48 -07:00
git-bisect.txt Merge branch 'mg/bisect-doc' 2013-02-14 10:29:01 -08:00
git-blame.txt blame: document multiple -L support 2013-08-06 14:34:43 -07:00
git-branch.txt Refer to branch.<name>.remote/merge when documenting --track 2013-09-09 11:03:01 -07:00
git-bundle.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-cat-file.txt Merge branch 'rh/ishes-doc' 2013-09-17 11:42:51 -07:00
git-check-attr.txt Merge branch 'jc/check-x-z' 2013-09-04 12:23:25 -07:00
git-check-ignore.txt check-ignore: Add option to ignore index contents 2013-09-12 15:40:29 -07:00
git-check-mailmap.txt builtin: add git-check-mailmap command 2013-07-13 10:19:37 -07:00
git-check-ref-format.txt Add new @ shortcut for HEAD 2013-09-12 14:39:34 -07:00
git-checkout-index.txt
git-checkout.txt checkout: update synopsys and documentation on detaching HEAD 2013-09-11 12:32:01 -07:00
git-cherry-pick.txt
git-cherry.txt doc: don't claim that cherry calls patch-id 2013-09-24 15:54:48 -07:00
git-citool.txt
git-clean.txt Documentation/git-clean: fix description for range 2013-07-24 19:16:13 -07:00
git-clone.txt Revert "git-clone.txt: remove the restriction on pushing from a shallow clone" 2013-07-15 08:35:32 -07:00
git-column.txt
git-commit-tree.txt commit-tree: document -S option consistently 2013-03-25 15:01:22 -07:00
git-commit.txt documentation: trivial style cleanups 2013-05-17 12:09:21 -07:00
git-config.txt Merge branch 'jc/url-match' 2013-09-09 14:50:36 -07:00
git-count-objects.txt count-objects: add -H option to humanize sizes 2013-04-10 13:27:26 -07:00
git-credential-cache--daemon.txt
git-credential-cache.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-credential-store.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-credential.txt Documentation: make AsciiDoc links always point to HTML files 2013-09-06 14:49:06 -07:00
git-cvsexportcommit.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-cvsimport.txt Merge branch 'ta/doc-no-small-caps' 2013-02-05 16:13:32 -08:00
git-cvsserver.txt Merge branch 'ta/doc-no-small-caps' 2013-02-05 16:13:32 -08:00
git-daemon.txt documentation: trivial style cleanups 2013-05-17 12:09:21 -07:00
git-describe.txt use 'commit-ish' instead of 'committish' 2013-09-04 15:03:03 -07:00
git-diff-files.txt
git-diff-index.txt Documentation/diff-index: mention two modes of operation 2013-05-20 15:50:44 -07:00
git-diff-tree.txt
git-diff.txt diff --no-index: describe in a separate paragraph 2013-08-28 15:17:18 -07:00
git-difftool.txt documentation: trivial style cleanups 2013-05-17 12:09:21 -07:00
git-fast-export.txt Documentation: Update 'linux-2.6.git' -> 'linux.git' 2013-06-22 23:36:48 -07:00
git-fast-import.txt Merge branch 'rh/ishes-doc' 2013-09-17 11:42:51 -07:00
git-fetch-pack.txt Merge branch 'nd/clone-connectivity-shortcut' 2013-09-09 14:30:01 -07:00
git-fetch.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-filter-branch.txt Merge branch 'maint-1.8.1' into maint 2013-03-25 13:46:42 -07:00
git-fmt-merge-msg.txt documentation: trivial style cleanups 2013-05-17 12:09:21 -07:00
git-for-each-ref.txt git-for-each-ref.txt: 'raw' is a supported date format 2013-01-21 16:26:26 -08:00
git-format-patch.txt format-patch doc: Thunderbird wraps lines unless mailnews.wraplength=0 2013-10-14 16:20:01 -07:00
git-fsck-objects.txt
git-fsck.txt documentation: trivial style cleanups 2013-05-17 12:09:21 -07:00
git-gc.txt Merge branch 'nd/gc-lock-against-each-other' 2013-09-04 12:35:34 -07:00
git-get-tar-commit-id.txt
git-grep.txt documentation: trivial style cleanups 2013-05-17 12:09:21 -07:00
git-gui.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-hash-object.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-help.txt doc: include --guide option description for "git help" 2013-04-03 07:43:29 -07:00
git-http-backend.txt doc/http-backend: match query-string in apache half-auth example 2013-04-13 22:27:06 -07:00
git-http-fetch.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-http-push.txt
git-imap-send.txt
git-index-pack.txt clone: open a shortcut for connectivity check 2013-05-28 08:07:20 -07:00
git-init-db.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-init.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-instaweb.txt
git-log.txt line-range-format.txt: clarify -L:regex usage form 2013-08-06 14:26:26 -07:00
git-lost-found.txt
git-ls-files.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-ls-remote.txt ls-remote doc: don't encourage use of branches-file 2013-06-23 00:33:58 -07:00
git-ls-tree.txt
git-mailinfo.txt documentation: trivial style cleanups 2013-05-17 12:09:21 -07:00
git-mailsplit.txt
git-merge-base.txt
git-merge-file.txt Documentation/git-merge-file: document option "--diff3" 2013-08-09 14:19:59 -07:00
git-merge-index.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-merge-one-file.txt
git-merge-tree.txt use 'tree-ish' instead of 'treeish' 2013-09-04 15:02:56 -07:00
git-merge.txt Merge branch 'maint-1.8.2' into maint-1.8.3 2013-09-05 14:24:52 -07:00
git-mergetool--lib.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-mergetool.txt documentation: trivial style cleanups 2013-05-17 12:09:21 -07:00
git-mktag.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-mktree.txt
git-mv.txt mv: update the path entry in .gitmodules for moved submodules 2013-08-06 14:10:35 -07:00
git-name-rev.txt use 'commit-ish' instead of 'committish' 2013-09-04 15:03:03 -07:00
git-notes.txt
git-p4.txt Change "remote tracking" to "remote-tracking" 2013-07-03 13:27:15 -07:00
git-pack-objects.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-pack-redundant.txt
git-pack-refs.txt Documentation: remove --prune from pack-refs examples 2013-07-18 16:23:46 -07:00
git-parse-remote.txt
git-patch-id.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-peek-remote.txt
git-prune-packed.txt git-prune-packed.txt: fix reference to GIT_OBJECT_DIRECTORY 2013-10-15 16:01:22 -07:00
git-prune.txt Documentation: fix git-prune example usage 2013-07-18 16:23:51 -07:00
git-pull.txt pull: allow pull to preserve merges when rebasing 2013-09-04 12:45:48 -07:00
git-push.txt Merge branch 'rh/ishes-doc' 2013-09-17 11:42:51 -07:00
git-quiltimport.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-read-tree.txt
git-rebase.txt Documentation: make AsciiDoc links always point to HTML files 2013-09-06 14:49:06 -07:00
git-receive-pack.txt
git-reflog.txt Merge branch 'jc/prune-all' 2013-05-29 14:23:04 -07:00
git-relink.txt
git-remote-ext.txt doc: various spelling fixes 2013-04-12 12:00:52 -07:00
git-remote-fd.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-remote-helpers.txto Rename {git- => git}remote-helpers.txt 2013-02-01 14:12:34 -08:00
git-remote-testgit.txt Merge branch 'jk/remote-helpers-doc' 2013-02-07 14:41:45 -08:00
git-remote.txt remote doc: document long forms of set-head options 2013-09-27 16:49:18 -07:00
git-repack.txt
git-replace.txt Doc: 'replace' merge and non-merge commits 2013-09-09 08:16:30 -07:00
git-repo-config.txt
git-request-pull.txt
git-rerere.txt
git-reset.txt Documentation: "git reset <tree-ish> <pathspec>" takes a tree-ish, not tree-sh 2013-07-19 10:15:09 -07:00
git-rev-list.txt log doc: the argument to --encoding is not optional 2013-08-05 08:19:47 -07:00
git-rev-parse.txt Merge branch 'rj/doc-rev-parse' 2013-08-30 10:08:13 -07:00
git-revert.txt Documentation: make AsciiDoc links always point to HTML files 2013-09-06 14:49:06 -07:00
git-rm.txt rm: delete .gitmodules entry of submodules removed from the work tree 2013-08-06 14:11:00 -07:00
git-send-email.txt send-email: be explicit with SSL certificate verification 2013-07-18 16:01:30 -07:00
git-send-pack.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-sh-i18n--envsubst.txt
git-sh-i18n.txt
git-sh-setup.txt mergetools/p4merge: create a base if none available 2013-03-13 10:46:07 -07:00
git-shell.txt shell: new no-interactive-login command to print a custom message 2013-03-09 23:21:35 -08:00
git-shortlog.txt git-shortlog.txt: make SYNOPSIS match log, update OPTIONS 2013-04-21 23:11:02 -07:00
git-show-branch.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-show-index.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-show-ref.txt Merge branch 'db/show-ref-head' 2013-07-22 11:23:56 -07:00
git-show.txt Documentation/git-show.txt: include common diff options, like git-log.txt 2013-07-17 17:50:56 -07:00
git-stage.txt
git-stash.txt Revert "git stash: avoid data loss when "git stash save" kills a directory" 2013-08-14 09:53:43 -07:00
git-status.txt Improve documentation concerning the status.submodulesummary setting 2013-09-11 12:20:41 -07:00
git-stripspace.txt Merge branch 'ta/doc-no-small-caps' 2013-02-05 16:13:32 -08:00
git-submodule.txt Merge branch 'fg/submodule-clone-depth' 2013-07-15 10:28:48 -07:00
git-svn.txt git-svn: Warn about changing default for --prefix in Git v2.0 2013-10-12 22:30:53 +00:00
git-symbolic-ref.txt
git-tag.txt Merge branch 'ds/doc-two-kinds-of-tags' 2013-07-31 12:38:21 -07:00
git-tar-tree.txt
git-tools.txt doc: various spelling fixes 2013-04-12 12:00:52 -07:00
git-unpack-file.txt
git-unpack-objects.txt
git-update-index.txt documentation: trivial style cleanups 2013-05-17 12:09:21 -07:00
git-update-ref.txt update-ref: support multiple simultaneous updates 2013-09-09 09:54:37 -07:00
git-update-server-info.txt
git-upload-archive.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-upload-pack.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-var.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
git-verify-pack.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-verify-tag.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
git-web--browse.txt web--browse: support /usr/bin/cygstart on Cygwin 2013-06-21 09:05:15 -07:00
git-whatchanged.txt whatchanged: document its historical nature 2013-08-13 09:01:54 -07:00
git-write-tree.txt
git.txt git.txt: fix asciidoc syntax of --*-pathspecs 2013-10-15 15:47:05 -07:00
gitattributes.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gitcli.txt use 'commit-ish' instead of 'committish' 2013-09-04 15:03:03 -07:00
gitcore-tutorial.txt core-tutorial: trim the section on Inspecting Changes 2013-08-13 09:01:52 -07:00
gitcredentials.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gitcvs-migration.txt Documentation: make AsciiDoc links always point to HTML files 2013-09-06 14:49:06 -07:00
gitdiffcore.txt diffcore-pickaxe doc: document -S and -G properly 2013-06-03 10:53:11 -07:00
gitglossary.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
githooks.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
gitignore.txt Merge branch 'ta/doc-no-small-caps' 2013-02-05 16:13:32 -08:00
gitk.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gitmodules.txt Improve documentation concerning the status.submodulesummary setting 2013-09-11 12:20:41 -07:00
gitnamespaces.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gitremote-helpers.txt Merge branch 'mm/remote-helpers-doc' 2013-09-12 14:41:50 -07:00
gitrepository-layout.txt Document .git/modules 2013-06-09 13:45:32 -07:00
gitrevisions.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gittutorial-2.txt The name of the hash function is "SHA-1", not "SHA1" 2013-04-15 11:08:37 -07:00
gittutorial.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
gitweb.conf.txt gitweb: allow extra breadcrumbs to prefix the trail 2013-07-04 21:52:15 -07:00
gitweb.txt typofix: documentation 2013-07-22 16:06:48 -07:00
gitworkflows.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
glossary-content.txt Merge branch 'rh/ishes-doc' 2013-09-17 11:42:51 -07:00
howto-index.sh Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
i18n.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
install-doc-quick.sh
install-webdoc.sh
line-range-format.txt line-range: teach -L^:RE to search from start of file 2013-08-06 14:48:02 -07:00
mailmap.txt Merge branch 'jk/mailmap-from-blob' 2013-01-05 23:41:42 -08:00
Makefile Documentation/Makefile: make AsciiDoc dblatex dir configurable 2013-10-03 12:21:19 -07:00
manpage-1.72.xsl
manpage-base-url.xsl.in
manpage-base.xsl
manpage-bold-literal.xsl
manpage-normal.xsl
manpage-quote-apos.xsl
manpage-suppress-sp.xsl
merge-config.txt Merge branch 'da/mergetool-docs' 2013-02-07 14:42:16 -08:00
merge-options.txt Merge branch 'rh/merge-options-doc-fix' into maint 2013-07-03 15:36:30 -07:00
merge-strategies.txt git-merge(1): document diff-algorithm option to merge-recursive 2013-04-05 10:57:23 -07:00
pretty-formats.txt Merge branch 'nd/pretty-formats' 2013-04-23 11:22:48 -07:00
pretty-options.txt log doc: the argument to --encoding is not optional 2013-08-05 08:19:47 -07:00
pull-fetch-param.txt fetch: opportunistically update tracking refs 2013-05-12 15:23:48 -07:00
rev-list-options.txt Sync with maint to grab trivial doc fixes 2013-08-05 13:00:20 -07:00
revisions.txt Merge branch 'fc/at-head' 2013-09-20 12:38:10 -07:00
sequencer.txt
SubmittingPatches Provide some linguistic guidance for the documentation. 2013-08-01 13:13:52 -07:00
urls-remotes.txt Documentation: the name of the system is 'Git', not 'git' 2013-02-01 13:53:33 -08:00
urls.txt Merge branch 'ft/doc-git-transport' into maint 2013-07-21 22:51:24 -07:00
user-manual.conf
user-manual.txt Merge branch 'ss/doclinks' 2013-09-17 11:42:54 -07:00