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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tcbdb.c

?? 高性能嵌入式數據庫在高并發的環境下使用最好是64位系統比較好
?? C
?? 第 1 頁 / 共 5 頁
字號:
  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. */BDBCMP 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 0;  }  return tchdbopaque(bdb->hdb) + 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;  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, BDBCODEC enc, void *encop, BDBCODEC 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 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));}/* Compare keys of two records by lexical order. */int tcbdbcmplexical(const char *aptr, int asiz, const char *bptr, int bsiz, void *op){  assert(aptr && asiz >= 0 && bptr && bsiz >= 0);  int rv;  TCCMPLEXICAL(rv, aptr, asiz, bptr, bsiz);  return rv;}/* Compare two keys as decimal strings of real numbers. */int tcbdbcmpdecimal(const char *aptr, int asiz, const char *bptr, int bsiz, void *op){  assert(aptr && asiz >= 0 && bptr && bsiz >= 0);  int sign;  int64_t anum = 0;  sign = 1;  if(asiz > 0 && *aptr == '-'){    aptr++;    asiz--;    sign = -1;  }  for(int i = 0; i < asiz; i++){    int c = aptr[i];    if(c < '0' || c > '9') continue;    anum = anum * 10 + c - '0';  }  anum *= sign;  int64_t bnum = 0;  sign = 1;  if(bsiz > 0 && *bptr == '-'){    bptr++;    bsiz--;    sign = -1;  }  for(int i = 0; i < bsiz; i++){    int c = bptr[i];    if(c < '0' || c > '9') continue;    bnum = bnum * 10 + c - '0';  }  bnum *= sign;  return (anum < bnum) ? -1 : anum > bnum;}/* Compare two keys as 32-bit integers in the native byte order. */int tcbdbcmpint32(const char *aptr, int asiz, const char *bptr, int bsiz, void *op){  assert(aptr && bptr);  int32_t anum, bnum;  if(asiz == sizeof(int32_t)){    memcpy(&anum, aptr, sizeof(int32_t));  } else if(asiz < sizeof(int32_t)){    memset(&anum, 0, sizeof(int32_t));    memcpy(&anum, aptr, asiz);  } else {    memcpy(&anum, aptr, sizeof(int32_t));  }  if(bsiz == sizeof(int32_t)){    memcpy(&bnum, bptr, sizeof(int32_t));  } else if(bsiz < sizeof(int32_t)){    memset(&bnum, 0, sizeof(int32_t));    memcpy(&bnum, bptr, bsiz);  } else {    memcpy(&bnum, bptr, sizeof(int32_t));  }  return (anum < bnum) ? -1 : anum > bnum;}/* Compare two keys as 64-bit integers in the native byte order. */int tcbdbcmpint64(const char *aptr, int asiz, const char *bptr, int bsiz, void *op){  assert(aptr && bptr);  int64_t anum, bnum;  if(asiz == sizeof(int64_t)){    memcpy(&anum, aptr, sizeof(int64_t));  } else if(asiz < sizeof(int64_t)){    memset(&anum, 0, sizeof(int64_t));    memcpy(&anum, aptr, asiz);  } else {    memcpy(&anum, aptr, sizeof(int64_t));  }  if(bsiz == sizeof(int64_t)){    memcpy(&bnum, bptr, sizeof(int64_t));  } else if(bsiz < sizeof(int64_t)){    memset(&bnum, 0, sizeof(int64_t));    memcpy(&bnum, bptr, bsiz);  } else {    memcpy(&bnum, bptr, sizeof(int64_t));  }  return (anum < bnum) ? -1 : anum > bnum;}/************************************************************************************************* * 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->tmtx = 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 = 0;  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->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 tcdumpmeta(TCBDB *bdb){  assert(bdb);  memset(bdb->opaque, 0, 64);  char *wp = bdb->opaque;  if(bdb->cmp == tcbdbcmplexical){    *(uint8_t *)(wp++) = 0x0;  } else if(bdb->cmp == tcbdbcmpdecimal){    *(uint8_t *)(wp++) = 0x1;  } else if(bdb->cmp == tcbdbcmpint32){    *(uint8_t *)(wp++) = 0x2;  } else if(bdb->cmp == tcbdbcmpint64){    *(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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久婷婷成人综合色| 日韩电影一区二区三区四区| 一区二区三区在线视频观看58| 日韩精品91亚洲二区在线观看| 岛国一区二区三区| 欧美肥大bbwbbw高潮| 国产日韩欧美精品电影三级在线 | 久久综合狠狠综合久久综合88| 中文字幕不卡三区| 精品一区二区久久| 欧美在线免费视屏| 国产精品高潮久久久久无| 麻豆一区二区在线| 在线观看一区二区视频| 国产精品私人自拍| 精品一区二区三区欧美| 欧美丝袜丝交足nylons| 国产精品久久久久天堂| 国产精品888| 精品国产免费人成在线观看| 日韩精品色哟哟| 欧美三级乱人伦电影| 一区二区三区国产豹纹内裤在线| 国产精品1024久久| 久久久影视传媒| 国产一区二区成人久久免费影院| 日韩一级视频免费观看在线| 亚洲福利国产精品| 欧美综合亚洲图片综合区| 亚洲欧美激情小说另类| 色综合天天天天做夜夜夜夜做| 久久久噜噜噜久久人人看| 国产乱人伦精品一区二区在线观看| 日韩写真欧美这视频| 日韩激情一区二区| 日韩亚洲欧美一区| 国产乱对白刺激视频不卡| 久久影院午夜片一区| 国产成人久久精品77777最新版本| 欧美精品一区二区三区很污很色的 | 福利一区二区在线观看| 久久久久久9999| 成人一道本在线| 国产精品不卡一区| 色天使久久综合网天天| 亚洲精品视频一区| 欧美日产国产精品| 日本va欧美va精品发布| 日韩精品一区二区三区蜜臀| 狠狠色综合播放一区二区| 国产亲近乱来精品视频| 99国产精品视频免费观看| 依依成人综合视频| 91精品国产一区二区三区| 久久99精品视频| 国产精品久久久久7777按摩| 色哟哟精品一区| 奇米综合一区二区三区精品视频| 欧美精品一区男女天堂| 99久久婷婷国产综合精品| 亚洲一区二区在线播放相泽| 制服丝袜亚洲播放| 国产成人综合自拍| 亚洲永久免费视频| 精品国产一二三区| 色综合久久久久久久| 免费成人av在线播放| 国产精品久久久久久久第一福利| 精品视频一区三区九区| 国内成人自拍视频| 一区二区三区在线视频免费| 欧美成人性福生活免费看| 91免费在线视频观看| 日本vs亚洲vs韩国一区三区二区| 国产欧美一区二区三区沐欲| 精品视频在线视频| 大陆成人av片| 开心九九激情九九欧美日韩精美视频电影 | 色婷婷av一区二区三区大白胸 | 尤物视频一区二区| 精品久久久三级丝袜| 91黄色激情网站| 国模娜娜一区二区三区| 一级特黄大欧美久久久| 国产日产欧产精品推荐色| 欧美高清视频一二三区 | 91香蕉视频在线| 久久国产精品99精品国产| 亚洲精品videosex极品| 久久综合久久综合亚洲| 欧美精品v日韩精品v韩国精品v| k8久久久一区二区三区| 另类调教123区| 蜜桃av一区二区在线观看| 国产精品不卡在线| 欧美国产日韩a欧美在线观看| 日韩欧美在线一区二区三区| 色偷偷一区二区三区| 成人午夜碰碰视频| 国产一区二区看久久| 蜜桃久久久久久| 日韩主播视频在线| 亚洲已满18点击进入久久| 亚洲男人的天堂av| 日韩久久一区二区| 国产精品美女久久久久aⅴ | 亚洲精选视频在线| 中国av一区二区三区| 久久久精品国产免费观看同学| 欧美一级淫片007| 日韩一区二区三区免费看 | 性久久久久久久| 亚洲主播在线观看| 午夜精品一区二区三区电影天堂| 亚洲免费观看高清完整版在线观看 | 91精品国产91综合久久蜜臀| 欧美日韩精品综合在线| 欧美日韩午夜在线视频| 欧美视频一区二区| 欧美一级久久久久久久大片| 欧美精品电影在线播放| 91精品免费在线观看| 美女一区二区视频| 国产精品欧美一级免费| 国产日产欧美精品一区二区三区| 国产日韩三级在线| 中文字幕一区二区在线播放| 一区在线中文字幕| 欧美精品电影在线播放| 国产精品资源站在线| 国产毛片一区二区| 欧美精品第1页| 亚洲久草在线视频| 成人午夜av电影| 日韩一区二区在线观看| 亚洲免费观看高清完整版在线 | 欧美国产精品久久| 日本视频免费一区| 一本色道久久综合狠狠躁的推荐| 欧美大度的电影原声| 一级特黄大欧美久久久| 国产精品香蕉一区二区三区| 在线不卡的av| 最新久久zyz资源站| 国产一区二区在线视频| 777欧美精品| 一级女性全黄久久生活片免费| 成人午夜精品在线| 久久精品亚洲国产奇米99| 热久久免费视频| 欧美老肥妇做.爰bbww| 亚洲精品视频在线观看免费| 丁香一区二区三区| 久久色.com| 国模少妇一区二区三区| 欧美电影免费观看高清完整版在线| 亚洲一区二区视频在线观看| 99久久精品久久久久久清纯| 国产亚洲欧美一区在线观看| 九九热在线视频观看这里只有精品| 欧美日韩亚洲丝袜制服| 一区二区三区精品久久久| 99这里都是精品| 亚洲欧洲中文日韩久久av乱码| 成人av综合在线| 国产精品久久一卡二卡| 成人av电影在线播放| 国产精品国产自产拍高清av| 成人激情校园春色| 国产精品美日韩| kk眼镜猥琐国模调教系列一区二区| 欧美激情艳妇裸体舞| 成人性视频免费网站| 国产亚洲欧美激情| 成人综合日日夜夜| 国产喷白浆一区二区三区| 风间由美中文字幕在线看视频国产欧美| 精品国产乱码久久久久久图片| 国产一区二区三区在线观看免费 | 亚洲精品一区二区三区在线观看| 免费av成人在线| 久久欧美中文字幕| 粉嫩高潮美女一区二区三区| 中文字幕乱码久久午夜不卡| 国产激情一区二区三区桃花岛亚洲| 久久久亚洲精华液精华液精华液| 国产美女在线观看一区| 中文天堂在线一区| 在线观看一区二区视频| 日本欧美加勒比视频| 精品福利在线导航| 成人久久久精品乱码一区二区三区| 亚洲欧洲国产日韩| 欧美色综合久久| 精品一区二区在线播放| 久久蜜桃香蕉精品一区二区三区| 成人av在线网站| 天天综合日日夜夜精品| 久久久久国色av免费看影院| 91在线精品一区二区三区|