##// END OF EJS Templates
index: make most "nt_*" functions take a nodetree...
Martin von Zweigbergk -
r38975:b6fb71a0 default
parent child Browse files
Show More
@@ -266,7 +266,7 b' static const char *index_node_existing(i'
266 return node;
266 return node;
267 }
267 }
268
268
269 static int nt_insert(indexObject *self, const char *node, int rev);
269 static int nt_insert(nodetree *self, const char *node, int rev);
270
270
271 static int node_check(PyObject *obj, char **node)
271 static int node_check(PyObject *obj, char **node)
272 {
272 {
@@ -304,7 +304,7 b' static PyObject *index_append(indexObjec'
304 return NULL;
304 return NULL;
305
305
306 if (self->nt)
306 if (self->nt)
307 nt_insert(self, node, len);
307 nt_insert(self->nt, node, len);
308
308
309 Py_CLEAR(self->headrevs);
309 Py_CLEAR(self->headrevs);
310 Py_RETURN_NONE;
310 Py_RETURN_NONE;
@@ -978,7 +978,7 b' static inline int nt_level(const char *n'
978 * -2: not found
978 * -2: not found
979 * rest: valid rev
979 * rest: valid rev
980 */
980 */
981 static int nt_find(indexObject *self, const char *node, Py_ssize_t nodelen,
981 static int nt_find(nodetree *self, const char *node, Py_ssize_t nodelen,
982 int hex)
982 int hex)
983 {
983 {
984 int (*getnybble)(const char *, Py_ssize_t) = hex ? hexdigit : nt_level;
984 int (*getnybble)(const char *, Py_ssize_t) = hex ? hexdigit : nt_level;
@@ -994,7 +994,7 b' static int nt_find(indexObject *self, co'
994
994
995 for (level = off = 0; level < maxlevel; level++) {
995 for (level = off = 0; level < maxlevel; level++) {
996 int k = getnybble(node, level);
996 int k = getnybble(node, level);
997 nodetreenode *n = &self->nt->nodes[off];
997 nodetreenode *n = &self->nodes[off];
998 int v = n->children[k];
998 int v = n->children[k];
999
999
1000 if (v < 0) {
1000 if (v < 0) {
@@ -1002,7 +1002,7 b' static int nt_find(indexObject *self, co'
1002 Py_ssize_t i;
1002 Py_ssize_t i;
1003
1003
1004 v = -(v + 2);
1004 v = -(v + 2);
1005 n = index_node(self, v);
1005 n = index_node(self->index, v);
1006 if (n == NULL)
1006 if (n == NULL)
1007 return -2;
1007 return -2;
1008 for (i = level; i < maxlevel; i++)
1008 for (i = level; i < maxlevel; i++)
@@ -1042,7 +1042,7 b' static int nt_new(nodetree *self)'
1042 return self->length++;
1042 return self->length++;
1043 }
1043 }
1044
1044
1045 static int nt_insert(indexObject *self, const char *node, int rev)
1045 static int nt_insert(nodetree *self, const char *node, int rev)
1046 {
1046 {
1047 int level = 0;
1047 int level = 0;
1048 int off = 0;
1048 int off = 0;
@@ -1052,7 +1052,7 b' static int nt_insert(indexObject *self, '
1052 nodetreenode *n;
1052 nodetreenode *n;
1053 int v;
1053 int v;
1054
1054
1055 n = &self->nt->nodes[off];
1055 n = &self->nodes[off];
1056 v = n->children[k];
1056 v = n->children[k];
1057
1057
1058 if (v == 0) {
1058 if (v == 0) {
@@ -1060,7 +1060,7 b' static int nt_insert(indexObject *self, '
1060 return 0;
1060 return 0;
1061 }
1061 }
1062 if (v < 0) {
1062 if (v < 0) {
1063 const char *oldnode = index_node_existing(self, -(v + 2));
1063 const char *oldnode = index_node_existing(self->index, -(v + 2));
1064 int noff;
1064 int noff;
1065
1065
1066 if (oldnode == NULL)
1066 if (oldnode == NULL)
@@ -1069,17 +1069,17 b' static int nt_insert(indexObject *self, '
1069 n->children[k] = -rev - 2;
1069 n->children[k] = -rev - 2;
1070 return 0;
1070 return 0;
1071 }
1071 }
1072 noff = nt_new(self->nt);
1072 noff = nt_new(self);
1073 if (noff == -1)
1073 if (noff == -1)
1074 return -1;
1074 return -1;
1075 /* self->nt->nodes may have been changed by realloc */
1075 /* self->nodes may have been changed by realloc */
1076 self->nt->nodes[off].children[k] = noff;
1076 self->nodes[off].children[k] = noff;
1077 off = noff;
1077 off = noff;
1078 n = &self->nt->nodes[off];
1078 n = &self->nodes[off];
1079 n->children[nt_level(oldnode, ++level)] = v;
1079 n->children[nt_level(oldnode, ++level)] = v;
1080 if (level > self->nt->depth)
1080 if (level > self->depth)
1081 self->nt->depth = level;
1081 self->depth = level;
1082 self->nt->splits += 1;
1082 self->splits += 1;
1083 } else {
1083 } else {
1084 level += 1;
1084 level += 1;
1085 off = v;
1085 off = v;
@@ -1089,7 +1089,7 b' static int nt_insert(indexObject *self, '
1089 return -1;
1089 return -1;
1090 }
1090 }
1091
1091
1092 static int nt_delete_node(indexObject *self, const char *node)
1092 static int nt_delete_node(nodetree *self, const char *node)
1093 {
1093 {
1094 /* rev==-2 happens to get encoded as 0, which is interpreted as not set */
1094 /* rev==-2 happens to get encoded as 0, which is interpreted as not set */
1095 return nt_insert(self, node, -2);
1095 return nt_insert(self, node, -2);
@@ -1124,7 +1124,7 b' static int nt_init(indexObject *self)'
1124 self->nt->splits = 0;
1124 self->nt->splits = 0;
1125 self->nt->length = 1;
1125 self->nt->length = 1;
1126 self->nt->index = self;
1126 self->nt->index = self;
1127 if (nt_insert(self, nullid, -1) == -1) {
1127 if (nt_insert(self->nt, nullid, -1) == -1) {
1128 free(self->nt->nodes);
1128 free(self->nt->nodes);
1129 PyMem_Free(self->nt);
1129 PyMem_Free(self->nt);
1130 self->nt = NULL;
1130 self->nt = NULL;
@@ -1150,7 +1150,7 b' static int index_find_node(indexObject *'
1150 return -3;
1150 return -3;
1151
1151
1152 self->ntlookups++;
1152 self->ntlookups++;
1153 rev = nt_find(self, node, nodelen, 0);
1153 rev = nt_find(self->nt, node, nodelen, 0);
1154 if (rev >= -1)
1154 if (rev >= -1)
1155 return rev;
1155 return rev;
1156
1156
@@ -1169,7 +1169,7 b' static int index_find_node(indexObject *'
1169 if (n == NULL)
1169 if (n == NULL)
1170 return -3;
1170 return -3;
1171 if (memcmp(node, n, nodelen > 20 ? 20 : nodelen) == 0) {
1171 if (memcmp(node, n, nodelen > 20 ? 20 : nodelen) == 0) {
1172 if (nt_insert(self, n, rev) == -1)
1172 if (nt_insert(self->nt, n, rev) == -1)
1173 return -3;
1173 return -3;
1174 break;
1174 break;
1175 }
1175 }
@@ -1179,7 +1179,7 b' static int index_find_node(indexObject *'
1179 const char *n = index_node_existing(self, rev);
1179 const char *n = index_node_existing(self, rev);
1180 if (n == NULL)
1180 if (n == NULL)
1181 return -3;
1181 return -3;
1182 if (nt_insert(self, n, rev) == -1) {
1182 if (nt_insert(self->nt, n, rev) == -1) {
1183 self->ntrev = rev + 1;
1183 self->ntrev = rev + 1;
1184 return -3;
1184 return -3;
1185 }
1185 }
@@ -1253,7 +1253,7 b' static int nt_populate(indexObject *self'
1253 const char *n = index_node_existing(self, rev);
1253 const char *n = index_node_existing(self, rev);
1254 if (n == NULL)
1254 if (n == NULL)
1255 return -1;
1255 return -1;
1256 if (nt_insert(self, n, rev) == -1)
1256 if (nt_insert(self->nt, n, rev) == -1)
1257 return -1;
1257 return -1;
1258 }
1258 }
1259 self->ntrev = -1;
1259 self->ntrev = -1;
@@ -1261,7 +1261,7 b' static int nt_populate(indexObject *self'
1261 return 0;
1261 return 0;
1262 }
1262 }
1263
1263
1264 static int nt_partialmatch(indexObject *self, const char *node,
1264 static int nt_partialmatch(nodetree *self, const char *node,
1265 Py_ssize_t nodelen)
1265 Py_ssize_t nodelen)
1266 {
1266 {
1267 return nt_find(self, node, nodelen, 1);
1267 return nt_find(self, node, nodelen, 1);
@@ -1276,19 +1276,19 b' static int nt_partialmatch(indexObject *'
1276 * -2: not found (no exception set)
1276 * -2: not found (no exception set)
1277 * rest: length of shortest prefix
1277 * rest: length of shortest prefix
1278 */
1278 */
1279 static int nt_shortest(indexObject *self, const char *node)
1279 static int nt_shortest(nodetree *self, const char *node)
1280 {
1280 {
1281 int level, off;
1281 int level, off;
1282
1282
1283 for (level = off = 0; level < 40; level++) {
1283 for (level = off = 0; level < 40; level++) {
1284 int k, v;
1284 int k, v;
1285 nodetreenode *n = &self->nt->nodes[off];
1285 nodetreenode *n = &self->nodes[off];
1286 k = nt_level(node, level);
1286 k = nt_level(node, level);
1287 v = n->children[k];
1287 v = n->children[k];
1288 if (v < 0) {
1288 if (v < 0) {
1289 const char *n;
1289 const char *n;
1290 v = -(v + 2);
1290 v = -(v + 2);
1291 n = index_node_existing(self, v);
1291 n = index_node_existing(self->index, v);
1292 if (n == NULL)
1292 if (n == NULL)
1293 return -3;
1293 return -3;
1294 if (memcmp(node, n, 20) != 0)
1294 if (memcmp(node, n, 20) != 0)
@@ -1345,7 +1345,7 b' static PyObject *index_partialmatch(inde'
1345 return NULL;
1345 return NULL;
1346 if (nt_populate(self) == -1)
1346 if (nt_populate(self) == -1)
1347 return NULL;
1347 return NULL;
1348 rev = nt_partialmatch(self, node, nodelen);
1348 rev = nt_partialmatch(self->nt, node, nodelen);
1349
1349
1350 switch (rev) {
1350 switch (rev) {
1351 case -4:
1351 case -4:
@@ -1380,7 +1380,7 b' static PyObject *index_shortest(indexObj'
1380 return NULL;
1380 return NULL;
1381 if (nt_populate(self) == -1)
1381 if (nt_populate(self) == -1)
1382 return NULL;
1382 return NULL;
1383 length = nt_shortest(self, node);
1383 length = nt_shortest(self->nt, node);
1384 if (length == -3)
1384 if (length == -3)
1385 return NULL;
1385 return NULL;
1386 if (length == -2) {
1386 if (length == -2) {
@@ -1802,7 +1802,7 b' static void nt_invalidate_added(indexObj'
1802 PyObject *tuple = PyList_GET_ITEM(self->added, i);
1802 PyObject *tuple = PyList_GET_ITEM(self->added, i);
1803 PyObject *node = PyTuple_GET_ITEM(tuple, 7);
1803 PyObject *node = PyTuple_GET_ITEM(tuple, 7);
1804
1804
1805 nt_delete_node(self, PyBytes_AS_STRING(node));
1805 nt_delete_node(self->nt, PyBytes_AS_STRING(node));
1806 }
1806 }
1807
1807
1808 if (start == 0)
1808 if (start == 0)
@@ -1861,7 +1861,7 b' static int index_slice_del(indexObject *'
1861 if (node == NULL)
1861 if (node == NULL)
1862 return -1;
1862 return -1;
1863
1863
1864 nt_delete_node(self, node);
1864 nt_delete_node(self->nt, node);
1865 }
1865 }
1866 if (self->added)
1866 if (self->added)
1867 nt_invalidate_added(self, 0);
1867 nt_invalidate_added(self, 0);
@@ -1913,7 +1913,7 b' static int index_assign_subscript(indexO'
1913 return -1;
1913 return -1;
1914
1914
1915 if (value == NULL)
1915 if (value == NULL)
1916 return self->nt ? nt_delete_node(self, node) : 0;
1916 return self->nt ? nt_delete_node(self->nt, node) : 0;
1917 rev = PyInt_AsLong(value);
1917 rev = PyInt_AsLong(value);
1918 if (rev > INT_MAX || rev < 0) {
1918 if (rev > INT_MAX || rev < 0) {
1919 if (!PyErr_Occurred())
1919 if (!PyErr_Occurred())
@@ -1923,7 +1923,7 b' static int index_assign_subscript(indexO'
1923
1923
1924 if (nt_init(self) == -1)
1924 if (nt_init(self) == -1)
1925 return -1;
1925 return -1;
1926 return nt_insert(self, node, (int)rev);
1926 return nt_insert(self->nt, node, (int)rev);
1927 }
1927 }
1928
1928
1929 /*
1929 /*
General Comments 0
You need to be logged in to leave comments. Login now