GRASS GIS 7 Programmer's Manual  7.5.svn(2017)-r71942
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
btree/next.c
Go to the documentation of this file.
1 #include <grass/btree.h>
2 
3 int btree_next(BTREE * B, void **key, void **data)
4 {
5  int q;
6 
7  if (B->N <= 0)
8  return 0;
9 
10  /* if rewound, start at root and go all the way to the left */
11  if (B->cur == 0)
12  B->cur = 1;
13 
14  /* go to the right */
15  else
16  B->cur = B->node[B->cur].right;
17 
18  if (B->cur == 0) /* no more */
19  return 0;
20 
21  if (B->cur < 0) /* thread. stop here */
22  B->cur = -(B->cur);
23  else /* go all the way left */
24  while ((q = B->node[B->cur].left))
25  B->cur = q;
26 
27  *key = B->node[B->cur].key;
28  *data = B->node[B->cur].data;
29 
30  return 1;
31 }
int cur
Definition: btree.h:18
int N
Definition: btree.h:16
int left
Definition: btree.h:8
Definition: btree.h:12
int btree_next(BTREE *B, void **key, void **data)
Definition: btree/next.c:3
void * key
Definition: btree.h:6
void * data
Definition: btree.h:7
BTREE_NODE * node
Definition: btree.h:14
int right
Definition: btree.h:9