亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? tcbdb.c

?? Tokyo Cabinet的Tokyo Cabinet 是一個(gè)DBM的實(shí)現(xiàn)。這里的數(shù)據(jù)庫(kù)由一系列key-value對(duì)的記錄構(gòu)成。key和value都可以是任意長(zhǎng)度的字節(jié)序列,既可以是二進(jìn)制也可以是字符
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
/* Synchronize updating contents on memory of a B+ tree database object. */bool tcbdbmemsync(TCBDB *bdb, bool phys){  assert(bdb);  if(!bdb->open || !bdb->wmode){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return false;  }  bool err = false;  bool clk = BDBLOCKCACHE(bdb);  const char *vbuf;  int vsiz;  TCMAP *leafc = bdb->leafc;  tcmapiterinit(leafc);  while((vbuf = tcmapiternext(leafc, &vsiz)) != NULL){    int rsiz;    BDBLEAF *leaf = (BDBLEAF *)tcmapiterval(vbuf, &rsiz);    if(leaf->dirty && !tcbdbleafsave(bdb, leaf)) err = true;  }  TCMAP *nodec = bdb->nodec;  tcmapiterinit(nodec);  while((vbuf = tcmapiternext(nodec, &vsiz)) != NULL){    int rsiz;    BDBNODE *node = (BDBNODE *)tcmapiterval(vbuf, &rsiz);    if(node->dirty && !tcbdbnodesave(bdb, node)) err = true;  }  if(clk) BDBUNLOCKCACHE(bdb);  tcbdbdumpmeta(bdb);  if(!tchdbmemsync(bdb->hdb, phys)) err = true;  return !err;}/* Clear the cache of a B+ tree database object. */bool tcbdbcacheclear(TCBDB *bdb){  assert(bdb);  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return false;  }  bool err = false;  if(TCMAPRNUM(bdb->leafc) > 0){    bool clk = BDBLOCKCACHE(bdb);    TCMAP *leafc = bdb->leafc;    tcmapiterinit(leafc);    int rsiz;    const void *buf;    while((buf = tcmapiternext(leafc, &rsiz)) != NULL){      if(!tcbdbleafcacheout(bdb, (BDBLEAF *)tcmapiterval(buf, &rsiz))) err = true;    }    if(clk) BDBUNLOCKCACHE(bdb);  }  if(TCMAPRNUM(bdb->nodec) > 0){    bool clk = BDBLOCKCACHE(bdb);    TCMAP *nodec = bdb->nodec;    tcmapiterinit(nodec);    int rsiz;    const void *buf;    while((buf = tcmapiternext(nodec, &rsiz)) != NULL){      if(!tcbdbnodecacheout(bdb, (BDBNODE *)tcmapiterval(buf, &rsiz))) err = true;    }    if(clk) BDBUNLOCKCACHE(bdb);  }  return !err;}/* Get the comparison function of a B+ tree database object. */TCCMP tcbdbcmpfunc(TCBDB *bdb){  assert(bdb);  return bdb->cmp;}/* Get the opaque object for the comparison function of a B+ tree database object. */void *tcbdbcmpop(TCBDB *bdb){  assert(bdb);  return bdb->cmpop;}/* Get the maximum number of cached leaf nodes of a B+ tree database object. */uint32_t tcbdblmemb(TCBDB *bdb){  assert(bdb);  return bdb->lmemb;}/* Get the maximum number of cached non-leaf nodes of a B+ tree database object. */uint32_t tcbdbnmemb(TCBDB *bdb){  assert(bdb);  return bdb->nmemb;}/* Get the number of the leaf nodes of B+ tree database object. */uint64_t tcbdblnum(TCBDB *bdb){  assert(bdb);  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return 0;  }  return bdb->lnum;}/* Get the number of the non-leaf nodes of B+ tree database object. */uint64_t tcbdbnnum(TCBDB *bdb){  assert(bdb);  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return 0;  }  return bdb->nnum;}/* Get the number of elements of the bucket array of a B+ tree database object. */uint64_t tcbdbbnum(TCBDB *bdb){  assert(bdb);  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return 0;  }  return tchdbbnum(bdb->hdb);}/* Get the record alignment of a B+ tree database object. */uint32_t tcbdbalign(TCBDB *bdb){  assert(bdb);  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return 0;  }  return tchdbalign(bdb->hdb);}/* Get the maximum number of the free block pool of a B+ tree database object. */uint32_t tcbdbfbpmax(TCBDB *bdb){  assert(bdb);  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return 0;  }  return tchdbfbpmax(bdb->hdb);}/* Get the inode number of the database file of a B+ tree database object. */uint64_t tcbdbinode(TCBDB *bdb){  assert(bdb);  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return 0;  }  return tchdbinode(bdb->hdb);}/* Get the modification time of the database file of a B+ tree database object. */time_t tcbdbmtime(TCBDB *bdb){  assert(bdb);  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return 0;  }  return tchdbmtime(bdb->hdb);}/* Get the additional flags of a B+ tree database object. */uint8_t tcbdbflags(TCBDB *bdb){  assert(bdb);  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return 0;  }  return tchdbflags(bdb->hdb);}/* Get the options of a B+ tree database object. */uint8_t tcbdbopts(TCBDB *bdb){  assert(bdb);  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return 0;  }  return bdb->opts;}/* Get the pointer to the opaque field of a B+ tree database object. */char *tcbdbopaque(TCBDB *bdb){  assert(bdb);  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return NULL;  }  return bdb->opaque + BDBOPAQUESIZ;}/* Get the number of used elements of the bucket array of a B+ tree database object. */uint64_t tcbdbbnumused(TCBDB *bdb){  assert(bdb);  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return 0;  }  return tchdbbnumused(bdb->hdb);}/* Set the maximum size of each leaf node. */bool tcbdbsetlsmax(TCBDB *bdb, uint32_t lsmax){  assert(bdb);  if(bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return false;  }  bdb->lsmax = (lsmax > 0) ? tclmax(lsmax, BDBMINLSMAX) : BDBDEFLSMAX;  return true;}/* Set the capacity number of records. */bool tcbdbsetcapnum(TCBDB *bdb, uint64_t capnum){  assert(bdb);  if(bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    return false;  }  bdb->capnum = capnum;  return true;}/* Set the custom codec functions of a B+ tree database object. */bool tcbdbsetcodecfunc(TCBDB *bdb, TCCODEC enc, void *encop, TCCODEC dec, void *decop){  assert(bdb && enc && dec);  if(!BDBLOCKMETHOD(bdb, true)) return false;  if(bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    BDBUNLOCKMETHOD(bdb);    return false;  }  bool rv = tchdbsetcodecfunc(bdb->hdb, enc, encop, dec, decop);  BDBUNLOCKMETHOD(bdb);  return rv;}/* Store a new record into a B+ tree database object with backward duplication. */bool tcbdbputdupback(TCBDB *bdb, const void *kbuf, int ksiz, const void *vbuf, int vsiz){  assert(bdb && kbuf && ksiz >= 0 && vbuf && vsiz >= 0);  if(!BDBLOCKMETHOD(bdb, true)) return false;  if(!bdb->open || !bdb->wmode){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    BDBUNLOCKMETHOD(bdb);    return false;  }  bool rv = tcbdbputimpl(bdb, kbuf, ksiz, vbuf, vsiz, BDBPDDUPB);  BDBUNLOCKMETHOD(bdb);  return rv;}/* Store a record into a B+ tree database object with a duplication handler. */bool tcbdbputproc(TCBDB *bdb, const void *kbuf, int ksiz, const char *vbuf, int vsiz,                  TCPDPROC proc, void *op){  assert(bdb && kbuf && ksiz >= 0 && proc);  if(!BDBLOCKMETHOD(bdb, true)) return false;  if(!bdb->open || !bdb->wmode){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    BDBUNLOCKMETHOD(bdb);    return false;  }  BDBPDPROCOP procop;  procop.proc = proc;  procop.op = op;  BDBPDPROCOP *procptr = &procop;  char stack[TCNUMBUFSIZ*2];  char *rbuf;  if(ksiz <= sizeof(stack) - sizeof(procptr)){    rbuf = stack;  } else {    TCMALLOC(rbuf, ksiz + sizeof(procptr));  }  char *wp = rbuf;  memcpy(wp, &procptr, sizeof(procptr));  wp += sizeof(procptr);  memcpy(wp, kbuf, ksiz);  kbuf = rbuf + sizeof(procptr);  bool rv = tcbdbputimpl(bdb, kbuf, ksiz, vbuf, vsiz, BDBPDPROC);  if(rbuf != stack) TCFREE(rbuf);  BDBUNLOCKMETHOD(bdb);  return rv;}/* Store a new string record into a B+ tree database object with backward duplication. */bool tcbdbputdupback2(TCBDB *bdb, const char *kstr, const char *vstr){  assert(bdb && kstr && vstr);  return tcbdbputdupback(bdb, kstr, strlen(kstr), vstr, strlen(vstr));}/* Move a cursor object to the rear of records corresponding a key. */bool tcbdbcurjumpback(BDBCUR *cur, const void *kbuf, int ksiz){  assert(cur && kbuf && ksiz >= 0);  TCBDB *bdb = cur->bdb;  if(!BDBLOCKMETHOD(bdb, false)) return false;  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    BDBUNLOCKMETHOD(bdb);    return false;  }  bool rv = tcbdbcurjumpimpl(cur, kbuf, ksiz, false);  BDBUNLOCKMETHOD(bdb);  return rv;}/* Move a cursor object to the rear of records corresponding a key string. */bool tcbdbcurjumpback2(BDBCUR *cur, const char *kstr){  assert(cur && kstr);  return tcbdbcurjumpback(cur, kstr, strlen(kstr));}/* Process each record atomically of a B+ tree database object. */bool tcbdbforeach(TCBDB *bdb, TCITER iter, void *op){  assert(bdb && iter);  if(!BDBLOCKMETHOD(bdb, true)) return false;  if(!bdb->open){    tcbdbsetecode(bdb, TCEINVALID, __FILE__, __LINE__, __func__);    BDBUNLOCKMETHOD(bdb);    return false;  }  BDBTHREADYIELD(bdb);  bool rv = tcbdbforeachimpl(bdb, iter, op);  BDBUNLOCKMETHOD(bdb);  return rv;}/************************************************************************************************* * private features *************************************************************************************************//* Clear all members.   `bdb' specifies the B+ tree database object. */static void tcbdbclear(TCBDB *bdb){  assert(bdb);  bdb->mmtx = NULL;  bdb->cmtx = NULL;  bdb->hdb = NULL;  bdb->opaque = NULL;  bdb->open = false;  bdb->wmode = false;  bdb->lmemb = BDBDEFLMEMB;  bdb->nmemb = BDBDEFNMEMB;  bdb->opts = 0;  bdb->root = 0;  bdb->first = 0;  bdb->last = 0;  bdb->lnum = 0;  bdb->nnum = 0;  bdb->rnum = 0;  bdb->leafc = NULL;  bdb->nodec = NULL;  bdb->cmp = NULL;  bdb->cmpop = NULL;  bdb->lcnum = BDBDEFLCNUM;  bdb->ncnum = BDBDEFNCNUM;  bdb->lsmax = BDBDEFLSMAX;  bdb->lschk = 0;  bdb->capnum = 0;  bdb->hist = NULL;  bdb->hnum = 0;  bdb->hleaf = 0;  bdb->lleaf = 0;  bdb->tran = false;  bdb->rbopaque = NULL;  bdb->clock = 0;  bdb->cnt_saveleaf = -1;  bdb->cnt_loadleaf = -1;  bdb->cnt_killleaf = -1;  bdb->cnt_adjleafc = -1;  bdb->cnt_savenode = -1;  bdb->cnt_loadnode = -1;  bdb->cnt_adjnodec = -1;  TCDODEBUG(bdb->cnt_saveleaf = 0);  TCDODEBUG(bdb->cnt_loadleaf = 0);  TCDODEBUG(bdb->cnt_killleaf = 0);  TCDODEBUG(bdb->cnt_adjleafc = 0);  TCDODEBUG(bdb->cnt_savenode = 0);  TCDODEBUG(bdb->cnt_loadnode = 0);  TCDODEBUG(bdb->cnt_adjnodec = 0);}/* Serialize meta data into the opaque field.   `bdb' specifies the B+ tree database object. */static void tcbdbdumpmeta(TCBDB *bdb){  assert(bdb);  memset(bdb->opaque, 0, 64);  char *wp = bdb->opaque;  if(bdb->cmp == tccmplexical){    *(uint8_t *)(wp++) = 0x0;  } else if(bdb->cmp == tccmpdecimal){    *(uint8_t *)(wp++) = 0x1;  } else if(bdb->cmp == tccmpint32){    *(uint8_t *)(wp++) = 0x2;  } else if(bdb->cmp == tccmpint64){    *(uint8_t *)(wp++) = 0x3;  } else {    *(uint8_t *)(wp++) = 0xff;  }  wp += 7;  uint32_t lnum;  lnum = bdb->lmemb;  lnum = TCHTOIL(lnum);  memcpy(wp, &lnum, sizeof(lnum));  wp += sizeof(lnum);  lnum = bdb->nmemb;  lnum = TCHTOIL(lnum);  memcpy(wp, &lnum, sizeof(lnum));  wp += sizeof(lnum);  uint64_t llnum;  llnum = bdb->root;  llnum = TCHTOILL(llnum);  memcpy(wp, &llnum, sizeof(llnum));  wp += sizeof(llnum);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲蜜臀av乱码久久精品| 偷拍一区二区三区四区| 在线观看欧美日本| 国产一区二区三区日韩| 亚洲成人你懂的| 日本一区二区三区在线不卡| 91麻豆精品国产| av在线不卡电影| 激情六月婷婷久久| 天天色天天爱天天射综合| 中文字幕在线不卡一区二区三区| 日韩欧美第一区| 欧美日韩免费观看一区二区三区| 成人午夜免费视频| 黄一区二区三区| 亚洲午夜成aⅴ人片| 中文字幕在线不卡视频| 久久久久国产免费免费 | 欧美zozo另类异族| 在线观看国产精品网站| 成人高清视频在线观看| 国产成人综合自拍| 蜜桃一区二区三区在线| 日日摸夜夜添夜夜添亚洲女人| 亚洲视频图片小说| 中文字幕欧美一| 亚洲国产精品精华液ab| 国产欧美一区二区精品性色超碰 | 91福利视频在线| 91免费版pro下载短视频| 国产经典欧美精品| 国产在线观看一区二区| 精品一区二区三区视频在线观看 | 亚洲一区二区三区爽爽爽爽爽| 国产日韩在线不卡| 久久午夜电影网| 精品国精品国产| 欧美大白屁股肥臀xxxxxx| 欧美一区二区三区在线看| 欧美挠脚心视频网站| 欧美三片在线视频观看| 欧美日韩国产中文| 欧美老肥妇做.爰bbww视频| 欧美午夜免费电影| 欧美日韩免费观看一区三区| 9191成人精品久久| 日韩欧美不卡在线观看视频| 日韩三级视频中文字幕| 日韩女优电影在线观看| 精品播放一区二区| 国产欧美在线观看一区| 国产精品成人免费| 亚洲精品成人天堂一二三| 亚洲午夜一区二区| 一区二区三区四区不卡视频| 无码av中文一区二区三区桃花岛| 美洲天堂一区二卡三卡四卡视频| 麻豆视频观看网址久久| 国产成a人无v码亚洲福利| 一本色道久久综合亚洲aⅴ蜜桃| 在线看国产一区| 717成人午夜免费福利电影| 日韩欧美电影一区| 国产精品乱人伦| 一区二区三区在线视频观看58 | 精品99999| 国产精品久久久久桃色tv| 亚洲综合另类小说| 蜜桃传媒麻豆第一区在线观看| 国产一区 二区 三区一级| 91日韩精品一区| 日韩欧美的一区二区| 国产精品蜜臀av| 日韩福利视频网| 国产成人小视频| 欧美日韩免费在线视频| 国产午夜精品久久久久久久 | 日韩激情在线观看| 国产成人精品免费网站| 91成人国产精品| 337p日本欧洲亚洲大胆色噜噜| ...xxx性欧美| 人妖欧美一区二区| 成人app下载| 欧美mv日韩mv亚洲| 中文字幕在线免费不卡| 免费成人美女在线观看.| 99久久99久久综合| 日韩午夜在线观看| 亚洲精品成a人| 国产一区二区三区免费观看| 在线观看一区二区精品视频| 国产日韩欧美一区二区三区综合 | 老司机一区二区| 在线精品视频免费播放| 精品电影一区二区| 婷婷丁香激情综合| 成年人网站91| 久久午夜电影网| 日韩高清不卡在线| 91久久免费观看| 中日韩av电影| 久久精品国产在热久久| 欧美中文一区二区三区| 中文字幕免费一区| 韩国中文字幕2020精品| 欧美人狂配大交3d怪物一区| 一色屋精品亚洲香蕉网站| 国产精品中文欧美| 日韩三级高清在线| 亚洲va韩国va欧美va精品| 91麻豆产精品久久久久久| 国产蜜臀97一区二区三区| 精品一区二区免费在线观看| 欧美精品乱码久久久久久| 亚洲日本成人在线观看| 成人禁用看黄a在线| 国产欧美一区二区精品秋霞影院| 久久精品99国产精品| 欧美一级黄色片| 日韩电影在线观看一区| 欧美日韩国产另类一区| 亚洲一级二级在线| 日本高清视频一区二区| 亚洲乱码国产乱码精品精小说| 成人精品视频一区二区三区尤物| 国产拍欧美日韩视频二区 | 欧美日韩高清一区二区不卡 | 免费欧美在线视频| 制服丝袜中文字幕亚洲| 午夜精品一区二区三区免费视频| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲四区在线观看| 一本大道av一区二区在线播放| 国产精品久久免费看| 丁香婷婷综合色啪| 中文字幕不卡一区| av动漫一区二区| 亚洲视频一区二区在线| 日本久久精品电影| 亚洲午夜精品网| 欧美裸体bbwbbwbbw| 男人操女人的视频在线观看欧美| 欧美一区二区三区在线视频 | 欧美午夜精品一区二区三区| 亚洲高清免费视频| 91精品福利在线一区二区三区| 日韩综合在线视频| 日韩美女视频在线| 国产伦精品一区二区三区免费迷| 亚洲国产精品v| 在线观看一区二区精品视频| 午夜天堂影视香蕉久久| 日韩视频一区在线观看| 黑人巨大精品欧美一区| 国产精品理论片在线观看| 91久久精品日日躁夜夜躁欧美| 一区av在线播放| 精品噜噜噜噜久久久久久久久试看| 国产麻豆成人精品| 亚洲免费在线看| 678五月天丁香亚洲综合网| 韩国成人在线视频| 最新久久zyz资源站| 欧美猛男男办公室激情| 国产在线观看一区二区| 亚洲天堂成人网| 日韩视频一区二区三区在线播放| 国产成人在线视频网址| 亚洲午夜久久久| 久久久99精品久久| 在线免费精品视频| 国产一区二区三区免费播放 | 性做久久久久久免费观看欧美| 久久夜色精品国产欧美乱极品| a级高清视频欧美日韩| 三级欧美韩日大片在线看| 欧美激情中文不卡| 欧美美女直播网站| 高清在线成人网| 日本欧洲一区二区| 中文字幕在线观看一区二区| 欧美一区二区日韩| 91性感美女视频| 精品一区二区在线视频| 亚洲男人天堂av网| 国产婷婷一区二区| 欧美日韩精品二区第二页| 粗大黑人巨茎大战欧美成人| 日本不卡在线视频| 亚洲精品成人精品456| 国产色综合一区| 欧美一级二级在线观看| 在线观看中文字幕不卡| 大胆亚洲人体视频| 国产在线视频不卡二| 亚洲二区在线视频| 亚洲欧洲精品一区二区三区| 亚洲精品一线二线三线无人区| 欧美人动与zoxxxx乱|