Mercurial > hg-stable
changeset 38977:53bc73fae1a3
index: add pointer from nodetree back to index
This is always a cycle right now, but it will not be for the nodetree
instances I'm planning to add later (see earlier patch).
Differential Revision: https://phab.mercurial-scm.org/D4112
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Wed, 18 Jul 2018 23:07:08 -0700 |
parents | dcd395dc98d8 |
children | b6fb71a0a005 |
files | mercurial/cext/revlog.c |
diffstat | 1 files changed, 6 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/cext/revlog.c Mon Aug 06 09:59:51 2018 -0700 +++ b/mercurial/cext/revlog.c Wed Jul 18 23:07:08 2018 -0700 @@ -28,6 +28,8 @@ #define PyInt_AsLong PyLong_AsLong #endif +typedef struct indexObjectStruct indexObject; + typedef struct { int children[16]; } nodetreenode; @@ -40,6 +42,7 @@ * Zero is empty */ typedef struct { + indexObject *index; nodetreenode *nodes; unsigned length; /* # nodes in use */ unsigned capacity; /* # nodes allocated */ @@ -59,7 +62,7 @@ * With string keys, we lazily perform a reverse mapping from node to * rev, using a base-16 trie. */ -typedef struct { +struct indexObjectStruct { PyObject_HEAD /* Type-specific fields go here. */ PyObject *data; /* raw bytes of index */ @@ -76,7 +79,7 @@ int ntlookups; /* # lookups */ int ntmisses; /* # lookups that miss the cache */ int inlined; -} indexObject; +}; static Py_ssize_t index_length(const indexObject *self) { @@ -1120,6 +1123,7 @@ self->nt->depth = 0; self->nt->splits = 0; self->nt->length = 1; + self->nt->index = self; if (nt_insert(self, nullid, -1) == -1) { free(self->nt->nodes); PyMem_Free(self->nt);