add TBTGetFirst/TBTGetLast methods
[tedtools.git] / tbtreetest.c
index cb5456e..124d733 100644 (file)
@@ -41,7 +41,7 @@ static void
 usage() {
        puts(
        "Usage:\n"
-       "tbtreetest [ -c CACHESIZE ] [-r] [-k] [-f FILE] [-D | -L | -b | -i KEY -v VALUE [ -S strategynumber ] | -d KEY | -s KEY ] [-V] [-q]\n"
+       "tbtreetest [ -c CACHESIZE ] [-r] [-k] [-f FILE] [-D | -L | -z | -b | -i KEY -v VALUE [ -S strategynumber ] | -d KEY | -s KEY ] [-V] [-q]\n"
        "\t-c CACHESIZE    - cache size in pages (default 0)\n"
        "\t-r              - readonly mode\n"
        "\t-k              - fixed size key (integer)\n"
@@ -49,6 +49,7 @@ usage() {
        puts(
        "\t-D              - dump data base\n"
         "\t-L              - list all pairs (in bulk format)\n"
+        "\t-z              - list first and last pairs\n"
        "\t-b              - bulk operations from stdin in format (insert/delete/search):\n"
        "\t                   I KEY VALUE\n"
        "\t                   D KEY\n"
@@ -72,6 +73,7 @@ extern int opterr;
 #define MODE_DUMP      4
 #define MODE_LIST      5
 #define MODE_BULK      6
+#define MODE_FL                7
 
 
 static TBTValue K,V;
@@ -127,7 +129,7 @@ main(int argn, char *argv[]) {
 
        memset(&db, 0, sizeof(TBTree));
 
-       while((i=getopt(argn,argv,"qVbS:Dc:hrkf:i:v:d:s:L")) != EOF) {
+       while((i=getopt(argn,argv,"qVbS:Dc:hrkf:i:v:d:s:Lz")) != EOF) {
                switch(i) {
                        case 'q':
                                quietout=1;
@@ -177,6 +179,9 @@ main(int argn, char *argv[]) {
                        case 'b':
                                mode=MODE_BULK;
                                break;
+                       case 'z':
+                               mode=MODE_FL;
+                               break;
                        case 'h':
                        default:
                                usage();
@@ -237,6 +242,28 @@ main(int argn, char *argv[]) {
 
                }
                TBTFreeIterator(&db, &iterator);
+       } else if ( mode==MODE_FL ) {
+               TBTValue key, value;
+               rc = TBTGetFirst(&db, &key, &value);
+               if ( key.value ) {
+                       if ( db.keylen )
+                               printf("%d", *(int*)(key.value));
+                       else 
+                               printLSTR(key.length, key.value);
+                       fputc('\t', stdout);
+                       printLSTR(value.length, value.value);
+                       fputc('\n', stdout);
+               }
+               rc |= TBTGetLast(&db, &key, &value);
+               if ( key.value ) {
+                       if ( db.keylen )
+                               printf("%d", *(int*)(key.value));
+                       else 
+                               printLSTR(key.length, key.value);
+                       fputc('\t', stdout);
+                       printLSTR(value.length, value.value);
+                       fputc('\n', stdout);
+               }
        } else if ( mode==MODE_BULK ) {
                char buf[TBTREEPAGESIZE];
                int tmp;