⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcadb.c

📁 Tokyo Cabinet的Tokyo Cabinet 是一个DBM的实现。这里的数据库由一系列key-value对的记录构成。key和value都可以是任意长度的字节序列,既可以是二进制也可以是字符
💻 C
📖 第 1 页 / 共 5 页
字号:
          TCLISTPUSH(rv, vbuf, vsiz);          TCFREE(vbuf);        } else {          tclistdel(rv);          rv = NULL;        }      } else {        rv = NULL;      }    } else if(!strcmp(name, "putlist")){      rv = tclistnew2(1);      argc--;      for(int i = 0; i < argc; i += 2){        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, i, ksiz);        int vsiz;        const char *vbuf = tclistval(args, i + 1, &vsiz);        tcndbput(adb->ndb, kbuf, ksiz, vbuf, vsiz);      }    } else if(!strcmp(name, "outlist")){      rv = tclistnew2(1);      for(int i = 0; i < argc; i++){        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, i, ksiz);        tcndbout(adb->ndb, kbuf, ksiz);      }    } else if(!strcmp(name, "getlist")){      rv = tclistnew2(argc);      for(int i = 0; i < argc; i++){        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, i, ksiz);        int vsiz;        char *vbuf = tcndbget(adb->ndb, kbuf, ksiz, &vsiz);        if(vbuf){          TCLISTPUSH(rv, kbuf, ksiz);          TCLISTPUSH(rv, vbuf, vsiz);          TCFREE(vbuf);        }      }    } else {      rv = NULL;    }    break;  case ADBOHDB:    if(!strcmp(name, "put") || !strcmp(name, "putkeep") || !strcmp(name, "putcat")){      if(argc > 1){        rv = tclistnew2(1);        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, 0, ksiz);        const char *vbuf;        int vsiz;        TCLISTVAL(vbuf, args, 1, vsiz);        bool err = false;        if(!strcmp(name, "put")){          if(!tchdbput(adb->hdb, kbuf, ksiz, vbuf, vsiz)) err = true;        } else if(!strcmp(name, "putkeep")){          if(!tchdbputkeep(adb->hdb, kbuf, ksiz, vbuf, vsiz)) err = true;        } else if(!strcmp(name, "putcat")){          if(!tchdbputcat(adb->hdb, kbuf, ksiz, vbuf, vsiz)) err = true;        }        if(err){          tclistdel(rv);          rv = NULL;        }      } else {        rv = NULL;      }    } else if(!strcmp(name, "out")){      if(argc > 0){        rv = tclistnew2(1);        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, 0, ksiz);        if(!tchdbout(adb->hdb, kbuf, ksiz)){          tclistdel(rv);          rv = NULL;        }      } else {        rv = NULL;      }    } else if(!strcmp(name, "get")){      if(argc > 0){        rv = tclistnew2(1);        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, 0, ksiz);        int vsiz;        char *vbuf = tchdbget(adb->hdb, kbuf, ksiz, &vsiz);        if(vbuf){          TCLISTPUSH(rv, vbuf, vsiz);          TCFREE(vbuf);        } else {          tclistdel(rv);          rv = NULL;        }      } else {        rv = NULL;      }    } else if(!strcmp(name, "putlist")){      rv = tclistnew2(1);      bool err = false;      argc--;      for(int i = 0; i < argc; i += 2){        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, i, ksiz);        int vsiz;        const char *vbuf = tclistval(args, i + 1, &vsiz);        if(!tchdbput(adb->hdb, kbuf, ksiz, vbuf, vsiz)){          err = true;          break;        }      }      if(err){        tclistdel(rv);        rv = NULL;      }    } else if(!strcmp(name, "outlist")){      rv = tclistnew2(1);      bool err = false;      for(int i = 0; i < argc; i++){        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, i, ksiz);        if(!tchdbout(adb->hdb, kbuf, ksiz) && tchdbecode(adb->hdb) != TCENOREC){          err = true;          break;        }      }      if(err){        tclistdel(rv);        rv = NULL;      }    } else if(!strcmp(name, "getlist")){      rv = tclistnew2(argc);      bool err = false;      for(int i = 0; i < argc; i++){        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, i, ksiz);        int vsiz;        char *vbuf = tchdbget(adb->hdb, kbuf, ksiz, &vsiz);        if(vbuf){          TCLISTPUSH(rv, kbuf, ksiz);          TCLISTPUSH(rv, vbuf, vsiz);          TCFREE(vbuf);        } else if(tchdbecode(adb->hdb) != TCENOREC){          err = true;        }      }      if(err){        tclistdel(rv);        rv = NULL;      }    } else {      rv = NULL;    }    break;  case ADBOBDB:    if(!strcmp(name, "put") || !strcmp(name, "putkeep") || !strcmp(name, "putcat") ||       !strcmp(name, "putdup") || !strcmp(name, "putdupback")){      if(argc > 1){        rv = tclistnew2(1);        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, 0, ksiz);        const char *vbuf;        int vsiz;        TCLISTVAL(vbuf, args, 1, vsiz);        bool err = false;        if(!strcmp(name, "put")){          if(!tcbdbput(adb->bdb, kbuf, ksiz, vbuf, vsiz)) err = true;        } else if(!strcmp(name, "putkeep")){          if(!tcbdbputkeep(adb->bdb, kbuf, ksiz, vbuf, vsiz)) err = true;        } else if(!strcmp(name, "putcat")){          if(!tcbdbputcat(adb->bdb, kbuf, ksiz, vbuf, vsiz)) err = true;        } else if(!strcmp(name, "putdup")){          if(!tcbdbputdup(adb->bdb, kbuf, ksiz, vbuf, vsiz)) err = true;        } else if(!strcmp(name, "putback")){          if(!tcbdbputdupback(adb->bdb, kbuf, ksiz, vbuf, vsiz)) err = true;        }        if(err){          tclistdel(rv);          rv = NULL;        }      } else {        rv = NULL;      }    } else if(!strcmp(name, "out")){      if(argc > 0){        rv = tclistnew2(1);        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, 0, ksiz);        if(!tcbdbout(adb->bdb, kbuf, ksiz)){          tclistdel(rv);          rv = NULL;        }      } else {        rv = NULL;      }    } else if(!strcmp(name, "get")){      if(argc > 0){        rv = tclistnew2(1);        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, 0, ksiz);        TCLIST *vals = tcbdbget4(adb->bdb, kbuf, ksiz);        if(vals){          tclistdel(rv);          rv = vals;        } else {          tclistdel(rv);          rv = NULL;        }      } else {        rv = NULL;      }    } else if(!strcmp(name, "putlist")){      rv = tclistnew2(1);      bool err = false;      argc--;      for(int i = 0; i < argc; i += 2){        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, i, ksiz);        int vsiz;        const char *vbuf = tclistval(args, i + 1, &vsiz);        if(!tcbdbputdup(adb->bdb, kbuf, ksiz, vbuf, vsiz)){          err = true;          break;        }      }      if(err){        tclistdel(rv);        rv = NULL;      }    } else if(!strcmp(name, "outlist")){      rv = tclistnew2(1);      bool err = false;      for(int i = 0; i < argc; i++){        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, i, ksiz);        if(!tcbdbout3(adb->bdb, kbuf, ksiz) && tcbdbecode(adb->bdb) != TCENOREC){          err = true;          break;        }      }      if(err){        tclistdel(rv);        rv = NULL;      }    } else if(!strcmp(name, "getlist")){      rv = tclistnew2(argc);      bool err = false;      for(int i = 0; i < argc; i++){        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, i, ksiz);        TCLIST *vals = tcbdbget4(adb->bdb, kbuf, ksiz);        if(vals){          int vnum = TCLISTNUM(vals);          for(int j = 0; j < vnum; j++){            TCLISTPUSH(rv, kbuf, ksiz);            const char *vbuf;            int vsiz;            TCLISTVAL(vbuf, vals, j, vsiz);            TCLISTPUSH(rv, vbuf, vsiz);          }          tclistdel(vals);        } else if(tcbdbecode(adb->bdb) != TCENOREC){          err = true;        }      }      if(err){        tclistdel(rv);        rv = NULL;      }    } else {      rv = NULL;    }    break;  case ADBOFDB:    if(!strcmp(name, "put") || !strcmp(name, "putkeep") || !strcmp(name, "putcat")){      if(argc > 1){        rv = tclistnew2(1);        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, 0, ksiz);        const char *vbuf;        int vsiz;        TCLISTVAL(vbuf, args, 1, vsiz);        bool err = false;        if(!strcmp(name, "put")){          if(!tcfdbput2(adb->fdb, kbuf, ksiz, vbuf, vsiz)) err = true;        } else if(!strcmp(name, "putkeep")){          if(!tcfdbputkeep2(adb->fdb, kbuf, ksiz, vbuf, vsiz)) err = true;        } else if(!strcmp(name, "putcat")){          if(!tcfdbputcat2(adb->fdb, kbuf, ksiz, vbuf, vsiz)) err = true;        }        if(err){          tclistdel(rv);          rv = NULL;        }      } else {        rv = NULL;      }    } else if(!strcmp(name, "out")){      if(argc > 0){        rv = tclistnew2(1);        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, 0, ksiz);        if(!tcfdbout2(adb->fdb, kbuf, ksiz)){          tclistdel(rv);          rv = NULL;        }      } else {        rv = NULL;      }    } else if(!strcmp(name, "get")){      if(argc > 0){        rv = tclistnew2(1);        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, 0, ksiz);        int vsiz;        char *vbuf = tcfdbget2(adb->fdb, kbuf, ksiz, &vsiz);        if(vbuf){          TCLISTPUSH(rv, vbuf, vsiz);          TCFREE(vbuf);        } else {          tclistdel(rv);          rv = NULL;        }      } else {        rv = NULL;      }    } else if(!strcmp(name, "putlist")){      rv = tclistnew2(1);      bool err = false;      argc--;      for(int i = 0; i < argc; i += 2){        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, i, ksiz);        int vsiz;        const char *vbuf = tclistval(args, i + 1, &vsiz);        if(!tcfdbput2(adb->fdb, kbuf, ksiz, vbuf, vsiz)){          err = true;          break;        }      }      if(err){        tclistdel(rv);        rv = NULL;      }    } else if(!strcmp(name, "outlist")){      rv = tclistnew2(1);      bool err = false;      for(int i = 0; i < argc; i++){        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, i, ksiz);        if(!tcfdbout2(adb->fdb, kbuf, ksiz) && tcfdbecode(adb->fdb) != TCENOREC){          err = true;          break;        }      }      if(err){        tclistdel(rv);        rv = NULL;      }    } else if(!strcmp(name, "getlist")){      rv = tclistnew2(argc);      bool err = false;      for(int i = 0; i < argc; i++){        const char *kbuf;        int ksiz;        TCLISTVAL(kbuf, args, i, ksiz);        int vsiz;        char *vbuf = tcfdbget2(adb->fdb, kbuf, ksiz, &vsiz);        if(vbuf){          TCLISTPUSH(rv, kbuf, ksiz);          TCLISTPUSH(rv, vbuf, vsiz);          TCFREE(vbuf);        } else if(tcfdbecode(adb->fdb) != TCENOREC){          err = true;        }      }      if(err){        tclistdel(rv);        rv = NULL;      }    } else {      rv = NULL;    }    break;  case ADBOTDB:    if(!strcmp(name, "put") || !strcmp(name, "putkeep") || !strcmp(name, "putcat")){      if(argc > 0){        rv = tclistnew2(1);        char *pkbuf;        int pksiz;        TCLISTVAL(pkbuf, args, 0, pksiz);        argc--;        TCMAP *cols = tcmapnew2(argc);        for(int i = 1; i < argc; i += 2){          const char *kbuf;          int ksiz;          TCLISTVAL(kbuf, args, i, ksiz);          int vsiz;          const char *vbuf = tclistval(args, i + 1, &vsiz);          tcmapput(cols, kbuf, ksiz, vbuf, vsiz);        }        bool err = false;        if(!strcmp(name, "put")){          if(!tctdbput(adb->tdb, pkbuf, pksiz, cols)) err = true;        } else if(!strcmp(name, "putkeep")){          if(!tctdbputkeep(adb->tdb, pkbuf, pksiz, cols)) err = true;        } else if(!strcmp(name, "putcat")){          if(!tctdbputcat(adb->tdb, pkbuf, pksiz, cols)) err = true;        }        tcmapdel(cols);        if(err){          tclistdel(rv);          rv = NULL;        }      } else {        rv = NULL;      }    } else if(!strcmp(name, "out")){      if(argc > 0){        rv = tclistnew2(1);        char *pkbuf;        int pksiz;        TCLISTVAL(pkbuf, args, 0, pksiz);        if(!tctdbout(adb->tdb, pkbuf, pksiz)){          tclistdel(rv);          rv = NULL;        }      } else {        rv = NULL;      }    } else if(!strcmp(name, "get")){      if(argc > 0){        rv = tclistnew2(1);        char *pkbuf;        int pksiz;        TCLISTVAL(pkbuf, args, 0, pksiz);        TCMAP *cols = tctdbget(adb->tdb, pkbuf, pksiz);        if(cols){          tcmapiterinit(cols);          const char *kbuf;          int ksiz;          while((kbuf = tcmapiternext(cols, &ksiz)) != NULL){            int vsiz;            const char *vbuf = tcmapiterval(kbuf, &vsiz);            TCLISTPUSH(rv, kbuf, ksiz);            TCLISTPUSH(rv, vbuf, vsiz);          }          tcmapdel(cols);        } else {          tclistdel(rv);          rv = NULL;        }      } else {        rv = NULL;      }    } else if(!strcmp(name, "putlist")){      rv = tclistnew2(1);      bool err = false;      argc--;      for(int i = 0; i < argc; i += 2){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -