Skip to content

Commit 3b8f2aa

Browse files
committedDec 9, 2020
Add cursor->key_datum()/val_datum()
1 parent 3f75c83 commit 3b8f2aa

File tree

3 files changed

+44
-0
lines changed

3 files changed

+44
-0
lines changed
 

‎README.md

+12
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,18 @@ while (rc == TKVDB_OK) {
9191
cursor->free(cursor);
9292
```
9393

94+
`while` loop can be written in alternative way
95+
96+
```
97+
while (rc == TKVDB_OK) {
98+
tkvdb_datum key = cursor->key_datum(cursor);
99+
tkvdb_datum value = cursor->val_datum(cursor);
100+
101+
rc = cursor->next(cursor);
102+
}
103+
```
104+
105+
94106
To iterate in reverse order use `cursor->last()` and `cursor->prev()`.
95107

96108
If you want to search a key-value pair in database by prefix use `cursor->seek(cursor, &key, TKVDB_SEEK)`

‎tkvdb.c

+27
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,30 @@ tkvdb_cursor_valsize(tkvdb_cursor *c)
554554
return cdata->val_size;
555555
}
556556

557+
static tkvdb_datum
558+
tkvdb_cursor_key_datum(tkvdb_cursor *c)
559+
{
560+
tkvdb_datum dat;
561+
tkvdb_cursor_data *cdata = c->data;
562+
563+
dat.data = cdata->prefix;
564+
dat.size = cdata->prefix_size;
565+
566+
return dat;
567+
}
568+
569+
static tkvdb_datum
570+
tkvdb_cursor_val_datum(tkvdb_cursor *c)
571+
{
572+
tkvdb_datum dat;
573+
tkvdb_cursor_data *cdata = c->data;
574+
575+
dat.data = cdata->val;
576+
dat.size = cdata->val_size;
577+
578+
return dat;
579+
}
580+
557581
static int
558582
tkvdb_cursor_resize_prefix(tkvdb_cursor *c, size_t n, int grow)
559583
{
@@ -895,6 +919,9 @@ tkvdb_cursor_create(tkvdb_tr *tr)
895919
c->val = &tkvdb_cursor_val;
896920
c->valsize = &tkvdb_cursor_valsize;
897921

922+
c->key_datum = &tkvdb_cursor_key_datum;
923+
c->val_datum = &tkvdb_cursor_val_datum;
924+
898925
c->free = &tkvdb_cursor_free;
899926

900927
if (trdata->params.alignval > 1) {

‎tkvdb.h

+5
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ struct tkvdb_cursor
110110
void *(*val)(tkvdb_cursor *c);
111111
size_t (*valsize)(tkvdb_cursor *c);
112112

113+
/* alternate way to get key/value */
114+
tkvdb_datum (*key_datum)(tkvdb_cursor *c);
115+
tkvdb_datum (*val_datum)(tkvdb_cursor *c);
116+
113117
TKVDB_RES (*seek)(tkvdb_cursor *c,
114118
const tkvdb_datum *key, TKVDB_SEEK seek);
115119
TKVDB_RES (*first)(tkvdb_cursor *c);
@@ -120,6 +124,7 @@ struct tkvdb_cursor
120124

121125
void (*free)(tkvdb_cursor *c);
122126

127+
123128
void *data;
124129
};
125130

0 commit comments

Comments
 (0)
Please sign in to comment.