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

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

?? mdw-btree.h

?? 實(shí)現(xiàn)非阻塞方式IO(NBIO)的java類
?? H
字號(hào):
/*  * Copyright (c) 2000 by Matt Welsh and The Regents of the University of  * California. All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice and the following * two paragraphs appear in all copies of this software. *  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * * Author: Matt Welsh <mdw@cs.berkeley.edu> *  *//* * This file provides a set of utility functions implementing a B-Tree. * This is useful for doing a fast search of a set of file descriptors. *  * XXX MDW: Need to add deletion in order to support removal of closed  * fd's from tree. */#ifndef _MDW_BTREE_H#define _MDW_BTREE_H#define BTREE_DEBUG(_x) #define BTREE_PARAM_M 3 typedef struct _btree_node {  int numkeys;    int keys[(2*BTREE_PARAM_M)-1];  void *data[(2*BTREE_PARAM_M)-1];  struct _btree_node *children[2*BTREE_PARAM_M];  int leaf;} btree_node;static inline void btree_dump(btree_node *node, int indent) {  int i, n;  for (i = 0; i < node->numkeys; i++) {     for (n = 0; n < indent; n++) fprintf(stderr," ");    fprintf(stderr,"keys[%d] is %d\n", i, node->keys[i]);  }  if (node->leaf == 0) {    for (i = 0; i < node->numkeys+1; i++) {       for (n = 0; n < indent; n++) fprintf(stderr," ");      fprintf(stderr,"children[%d]:\n", i);      btree_dump(node->children[i], indent+4);    }  }}static inline void *btree_search(btree_node *node, int key) {  int i = 0;  BTREE_DEBUG(btree_dump(node, 1));  BTREE_DEBUG(fprintf(stderr,"btree_search: key %d\n", key));  while ((i < node->numkeys) && (key > node->keys[i])) {    BTREE_DEBUG(fprintf(stderr,"btree_search: node->keys[%d] is %d\n", i, node->keys[i]));    i++;  }  if ((i < node->numkeys) && (key == node->keys[i])) {    BTREE_DEBUG(fprintf(stderr,"btree_search: exact match found at %d\n", i));    return node->data[i];  }  if (node->leaf != 0) {    BTREE_DEBUG(fprintf(stderr,"btree_search: not found and leaf\n"));    return NULL;  }  // XXX Should be node->children[i-1]?  BTREE_DEBUG(fprintf(stderr,"btree_search: recursing on children[%d]\n", i));  return btree_search(node->children[i], key);}static inline btree_node *btree_newnode() {  btree_node *node = (btree_node *)malloc(sizeof(btree_node));  if (node == NULL) {    fprintf(stderr,"Warning: Cannot allocate new btree_node!\n");  }  node->numkeys = 0;  node->leaf = 1;  return node;}static inline void btree_split_child(btree_node *node, int index, btree_node *child) {  btree_node *newnode = btree_newnode();  int j;  BTREE_DEBUG(fprintf(stderr,"btree_split_child: index %d (leaf=%d)\n", index, node->leaf));  newnode->leaf = child->leaf;  BTREE_DEBUG(fprintf(stderr,"newnode->leaf is %d\n", newnode->leaf));  newnode->numkeys = BTREE_PARAM_M-1;  BTREE_DEBUG(fprintf(stderr,"newnode->numkeys is %d\n", newnode->numkeys));  BTREE_DEBUG(fprintf(stderr,"moving child keys to newnode (leaf=%d)\n", node->leaf));  for (j = 0; j < BTREE_PARAM_M-1; j++) {    newnode->keys[j] = child->keys[j+BTREE_PARAM_M];    newnode->data[j] = child->data[j+BTREE_PARAM_M];  }  if (child->leaf == 0) {    BTREE_DEBUG(fprintf(stderr,"moving child children to newnode (leaf=%d)\n", node->leaf));    for (j = 0; j < BTREE_PARAM_M; j++) {      newnode->children[j] = child->children[j+BTREE_PARAM_M];    }  }  child->numkeys = BTREE_PARAM_M-1;  BTREE_DEBUG(fprintf(stderr,"shifting node->children right (leaf=%d)\n", node->leaf));  // XXX Should be j >= index+1?  for (j = node->numkeys; j >= index; j--) {    node->children[j+1] = node->children[j];  }  BTREE_DEBUG(fprintf(stderr,"adding newnode to node->children at %d (leaf=%d)\n", index+1, node->leaf));  node->children[index+1] = newnode;  BTREE_DEBUG(fprintf(stderr,"shifting node->keys right, %d keys (leaf=%d)\n", node->numkeys, node->leaf));  for (j = node->numkeys; j >= index+1; j--) {    node->keys[j] = node->keys[j-1];    node->data[j] = node->data[j-1];  }  BTREE_DEBUG(fprintf(stderr,"adding child->keys[%d] to node->keys[%d] (val %d)\n", BTREE_PARAM_M-1, index, child->keys[BTREE_PARAM_M-1]));  node->keys[index] = child->keys[BTREE_PARAM_M-1];  node->data[index] = child->data[BTREE_PARAM_M-1];  node->numkeys++;  BTREE_DEBUG(fprintf(stderr,"split done, leaf=%d\n", node->leaf));  BTREE_DEBUG(fprintf(stderr,"After splitting child, subtree: ****\n"));  BTREE_DEBUG(btree_dump(node, 5));  BTREE_DEBUG(fprintf(stderr,"**********\n"));}static inline void btree_insert_nonfull(btree_node *node, int key, void *data) {  int i = node->numkeys-1;  BTREE_DEBUG(fprintf(stderr,"btree_insert_nonfull: key %d, node->numkeys %d\n", key, node->numkeys));  if (node->leaf == 1) {    BTREE_DEBUG(fprintf(stderr,"btree_insert_nonfull: node is leaf\n"));    BTREE_DEBUG(fprintf(stderr,"btree_insert_nonfull: shifting keys right\n"));    while ((i >= 0) && (key < node->keys[i])) {      node->keys[i+1] = node->keys[i];      node->data[i+1] = node->data[i];      i--;    }    BTREE_DEBUG(fprintf(stderr,"btree_insert_nonfull: inserting at keys[%d]\n",i+1));    node->keys[i+1] = key;    node->data[i+1] = data;    node->numkeys++;  } else {    btree_node *child;    BTREE_DEBUG(fprintf(stderr,"btree_insert_nonfull: node is not a leaf\n"));    while ((i >= 0) && (key < node->keys[i])) {      i--;    }    i++;    child = node->children[i];    BTREE_DEBUG(fprintf(stderr,"btree_insert_nonfull: child is children[%d]\n", i));    if (child->numkeys == (2*BTREE_PARAM_M)-1) {      BTREE_DEBUG(fprintf(stderr,"btree_insert_nonfull: child full, splitting\n"));      btree_split_child(node, i, child);      BTREE_DEBUG(fprintf(stderr,"btree_insert_nonfull: After splitting child, tree is now: -----------\n"));      BTREE_DEBUG(btree_dump(node, 1));      BTREE_DEBUG(fprintf(stderr,"----------------------\n"));      if (key > node->keys[i]) i++;    }    BTREE_DEBUG(fprintf(stderr,"btree_insert_nonfull: inserting into child [%d]\n", i));    btree_insert_nonfull(node->children[i], key, data);  }}// Insert a key into the tree; return new root of treestatic inline btree_node *btree_insert(btree_node *tree, int key, void *data) {  btree_node *node, *origroot;  BTREE_DEBUG(fprintf(stderr,"btree_insert: inserting key %d\n", key));  BTREE_DEBUG(btree_dump(tree, 1));  if (tree->numkeys == (2*BTREE_PARAM_M)-1) {    node = btree_newnode();    node->leaf = 0;    origroot = tree;    node->children[0] = origroot;    btree_split_child(node, 0, origroot);    btree_insert_nonfull(node, key, data);    return node;  } else {    btree_insert_nonfull(tree, key, data);    return tree;  }}#endif /* _MDW_BTREE_H */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产女主播视频一区二区| 亚洲欧美另类小说| 亚洲国产你懂的| 国产精品99久久久久久久女警| 在线免费亚洲电影| 国产精品卡一卡二卡三| 国产丶欧美丶日本不卡视频| 久久综合九色欧美综合狠狠| 男女性色大片免费观看一区二区 | 日韩精品一区二区三区在线观看 | 视频一区在线视频| 91麻豆精品国产| 亚洲妇女屁股眼交7| 欧美国产综合一区二区| 成人毛片视频在线观看| 国产精品三级av| 91久久线看在观草草青青| 亚洲第一综合色| 日韩精品一区在线观看| 欧美三区在线观看| 国内精品久久久久影院色| 国产视频一区二区三区在线观看 | 色琪琪一区二区三区亚洲区| 亚洲精选视频免费看| 色就色 综合激情| 国产精品1区2区| 久久99精品一区二区三区三区| 中文字幕av一区二区三区高| www久久久久| 日韩欧美中文一区| 99re66热这里只有精品3直播 | 激情亚洲综合在线| 青青草91视频| 日韩av一区二区三区四区| 国产亚洲欧美激情| 337p日本欧洲亚洲大胆精品 | 欧美日韩电影一区| 国产91丝袜在线播放九色| 亚洲国产视频一区二区| 亚洲自拍偷拍av| 国产亚洲综合性久久久影院| 欧美tk丨vk视频| 欧洲精品视频在线观看| 91传媒视频在线播放| 色呦呦一区二区三区| 91久久精品一区二区三区| 91麻豆精品视频| 韩国一区二区视频| 国产精品系列在线观看| 国产xxx精品视频大全| 懂色av中文一区二区三区| 粉嫩欧美一区二区三区高清影视 | 九色综合狠狠综合久久| 久久99国产精品尤物| 狠狠色丁香久久婷婷综合丁香| 久久99精品视频| 国产精品一区不卡| 99riav一区二区三区| 欧美日韩国产天堂| 日韩一二三区不卡| 久久综合狠狠综合| 国产精品久久久久影院| 一区二区三区四区蜜桃| 欧美经典一区二区三区| 国产精品美女久久久久久久久久久 | 97久久精品人人澡人人爽| 欧美性做爰猛烈叫床潮| 色爱区综合激月婷婷| 欧美精品免费视频| 欧美精品久久一区| 精品国产成人系列| 欧美一区二区免费观在线| 欧美视频第二页| 精品日韩av一区二区| 国产精品激情偷乱一区二区∴| 亚洲综合一二区| 国产综合久久久久久久久久久久| 成人av中文字幕| 成人免费看的视频| 欧美日韩成人一区| 国产亚洲精品免费| 亚洲电影激情视频网站| 国产精品资源在线看| 色婷婷精品大视频在线蜜桃视频| 91麻豆精品国产综合久久久久久| 国产欧美精品一区aⅴ影院| 一区二区三区免费| 国产综合色视频| 色狠狠综合天天综合综合| 精品国产乱码久久久久久久| 一区二区欧美视频| 夫妻av一区二区| 欧美xxxx老人做受| 午夜精品123| 麻豆精品一区二区av白丝在线| 欧美aaaaa成人免费观看视频| 成人av片在线观看| 精品久久久久久久久久久院品网 | 国产精品久久久久久久久图文区| 日韩中文字幕麻豆| 91一区二区三区在线播放| 亚洲精品一区二区三区精华液 | 国产精品区一区二区三区| 蜜桃av噜噜一区二区三区小说| 97aⅴ精品视频一二三区| 欧美成人三级电影在线| 亚洲一区二区三区三| 成人免费观看男女羞羞视频| 精品国产一区二区三区久久影院 | 国产精品的网站| 国产精品一区三区| 欧美一区二区三区免费视频| 亚洲乱码国产乱码精品精的特点| 国产成人一级电影| 久久一二三国产| 蜜桃久久精品一区二区| 欧美老肥妇做.爰bbww| 亚洲免费高清视频在线| av高清久久久| 欧美美女一区二区| 亚洲精品欧美激情| jlzzjlzz欧美大全| 国产精品美女www爽爽爽| 国产成人免费视频| 久久精品亚洲精品国产欧美| 麻豆91精品视频| 日韩一卡二卡三卡| 肉肉av福利一精品导航| 555www色欧美视频| 视频一区二区不卡| 欧美一区二区三区小说| 国产曰批免费观看久久久| 97久久久精品综合88久久| 中文字幕第一区二区| 成人精品免费网站| 国产精品午夜久久| av在线播放一区二区三区| 国产精品福利一区二区| 色综合久久综合| 夜色激情一区二区| 欧美三级电影一区| 婷婷六月综合网| 欧美一区二区高清| 国产综合色在线视频区| 欧美激情一区二区三区蜜桃视频| 成人开心网精品视频| 国产精品国产三级国产三级人妇| 99re6这里只有精品视频在线观看| 亚洲欧美日韩国产综合在线| 欧美日韩视频在线一区二区| 日韩专区欧美专区| 久久―日本道色综合久久| 视频一区欧美精品| 精品久久一区二区| 国产宾馆实践打屁股91| 亚洲激情在线播放| 欧美裸体一区二区三区| 久久99精品久久久久久久久久久久| 国产三级一区二区三区| 99久免费精品视频在线观看| 亚洲一二三四区不卡| 日韩一区二区三区电影在线观看| 久久66热偷产精品| 日韩一区在线播放| 盗摄精品av一区二区三区| 亚洲精品高清在线| 欧美一区二区三区日韩视频| 国产成人亚洲精品青草天美| 亚洲女人****多毛耸耸8| 欧美区一区二区三区| 国产一区福利在线| 一区二区三区不卡视频在线观看 | 久久久影院官网| 91一区二区三区在线播放| 蜜臀av一区二区在线免费观看| 国产午夜精品一区二区三区视频| 91激情在线视频| 久久不见久久见免费视频7| 欧美一级日韩一级| 成人美女视频在线观看18| 亚洲gay无套男同| 欧美激情一区二区| 欧美高清www午色夜在线视频| 国产精品一区免费在线观看| 亚洲线精品一区二区三区八戒| 久久精品欧美一区二区三区不卡| 在线观看三级视频欧美| 国产一区二区三区香蕉| 亚洲综合清纯丝袜自拍| 久久久91精品国产一区二区三区| 91电影在线观看| 国产成人精品在线看| 视频在线观看一区| 亚洲欧美一区二区三区国产精品 | 国产精品午夜免费| 日韩欧美国产一区二区在线播放 | 免费三级欧美电影| 亚洲欧美国产高清| 久久老女人爱爱| 日韩欧美专区在线|