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

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

?? dbtuxtree.cpp

?? MySQL數據庫開發源碼 值得一看哦
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/* Copyright (C) 2003 MySQL AB   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#define DBTUX_TREE_CPP#include "Dbtux.hpp"/* * Add entry.  Handle the case when there is room for one more.  This * is the common case given slack in nodes. */voidDbtux::treeAdd(Frag& frag, TreePos treePos, TreeEnt ent){  TreeHead& tree = frag.m_tree;  NodeHandle node(frag);  if (treePos.m_loc != NullTupLoc) {    // non-empty tree    jam();    selectNode(node, treePos.m_loc);    unsigned pos = treePos.m_pos;    if (node.getOccup() < tree.m_maxOccup) {      // node has room      jam();      nodePushUp(node, pos, ent, RNIL);      return;    }    treeAddFull(frag, node, pos, ent);    return;  }  jam();  insertNode(node);  nodePushUp(node, 0, ent, RNIL);  node.setSide(2);  tree.m_root = node.m_loc;}/* * Add entry when node is full.  Handle the case when there is g.l.b * node in left subtree with room for one more.  It will receive the min * entry of this node.  The min entry could be the entry to add. */voidDbtux::treeAddFull(Frag& frag, NodeHandle lubNode, unsigned pos, TreeEnt ent){  TreeHead& tree = frag.m_tree;  TupLoc loc = lubNode.getLink(0);  if (loc != NullTupLoc) {    // find g.l.b node    NodeHandle glbNode(frag);    do {      jam();      selectNode(glbNode, loc);      loc = glbNode.getLink(1);    } while (loc != NullTupLoc);    if (glbNode.getOccup() < tree.m_maxOccup) {      // g.l.b node has room      jam();      Uint32 scanList = RNIL;      if (pos != 0) {        jam();        // add the new entry and return min entry        nodePushDown(lubNode, pos - 1, ent, scanList);      }      // g.l.b node receives min entry from l.u.b node      nodePushUp(glbNode, glbNode.getOccup(), ent, scanList);      return;    }    treeAddNode(frag, lubNode, pos, ent, glbNode, 1);    return;  }  treeAddNode(frag, lubNode, pos, ent, lubNode, 0);}/* * Add entry when there is no g.l.b node in left subtree or the g.l.b * node is full.  We must add a new left or right child node which * becomes the new g.l.b node. */voidDbtux::treeAddNode(Frag& frag, NodeHandle lubNode, unsigned pos, TreeEnt ent, NodeHandle parentNode, unsigned i){  NodeHandle glbNode(frag);  insertNode(glbNode);  // connect parent and child  parentNode.setLink(i, glbNode.m_loc);  glbNode.setLink(2, parentNode.m_loc);  glbNode.setSide(i);  Uint32 scanList = RNIL;  if (pos != 0) {    jam();    // add the new entry and return min entry    nodePushDown(lubNode, pos - 1, ent, scanList);  }  // g.l.b node receives min entry from l.u.b node  nodePushUp(glbNode, 0, ent, scanList);  // re-balance the tree  treeAddRebalance(frag, parentNode, i);}/* * Re-balance tree after adding a node.  The process starts with the * parent of the added node. */voidDbtux::treeAddRebalance(Frag& frag, NodeHandle node, unsigned i){  while (true) {    // height of subtree i has increased by 1    int j = (i == 0 ? -1 : +1);    int b = node.getBalance();    if (b == 0) {      // perfectly balanced      jam();      node.setBalance(j);      // height change propagates up    } else if (b == -j) {      // height of shorter subtree increased      jam();      node.setBalance(0);      // height of tree did not change - done      break;    } else if (b == j) {      // height of longer subtree increased      jam();      NodeHandle childNode(frag);      selectNode(childNode, node.getLink(i));      int b2 = childNode.getBalance();      if (b2 == b) {        jam();        treeRotateSingle(frag, node, i);      } else if (b2 == -b) {        jam();        treeRotateDouble(frag, node, i);      } else {        // height of subtree increased so it cannot be perfectly balanced        ndbrequire(false);      }      // height of tree did not increase - done      break;    } else {      ndbrequire(false);    }    TupLoc parentLoc = node.getLink(2);    if (parentLoc == NullTupLoc) {      jam();      // root node - done      break;    }    i = node.getSide();    selectNode(node, parentLoc);  }}/* * Remove entry.  Optimize for nodes with slack.  Handle the case when * there is no underflow i.e. occupancy remains at least minOccup.  For * interior nodes this is a requirement.  For others it means that we do * not need to consider merge of semi-leaf and leaf. */voidDbtux::treeRemove(Frag& frag, TreePos treePos){  TreeHead& tree = frag.m_tree;  unsigned pos = treePos.m_pos;  NodeHandle node(frag);  selectNode(node, treePos.m_loc);  TreeEnt ent;  if (node.getOccup() > tree.m_minOccup) {    // no underflow in any node type    jam();    nodePopDown(node, pos, ent, 0);    return;  }  if (node.getChilds() == 2) {    // underflow in interior node    jam();    treeRemoveInner(frag, node, pos);    return;  }  // remove entry in semi/leaf  nodePopDown(node, pos, ent, 0);  if (node.getLink(0) != NullTupLoc) {    jam();    treeRemoveSemi(frag, node, 0);    return;  }  if (node.getLink(1) != NullTupLoc) {    jam();    treeRemoveSemi(frag, node, 1);    return;  }  treeRemoveLeaf(frag, node);}/* * Remove entry when interior node underflows.  There is g.l.b node in * left subtree to borrow an entry from.  The max entry of the g.l.b * node becomes the min entry of this node. */voidDbtux::treeRemoveInner(Frag& frag, NodeHandle lubNode, unsigned pos){  TreeHead& tree = frag.m_tree;  TreeEnt ent;  // find g.l.b node  NodeHandle glbNode(frag);  TupLoc loc = lubNode.getLink(0);  do {    jam();    selectNode(glbNode, loc);    loc = glbNode.getLink(1);  } while (loc != NullTupLoc);  // borrow max entry from semi/leaf  Uint32 scanList = RNIL;  nodePopDown(glbNode, glbNode.getOccup() - 1, ent, &scanList);  // g.l.b may be empty now  // a descending scan may try to enter the empty g.l.b  // we prevent this in scanNext  nodePopUp(lubNode, pos, ent, scanList);  if (glbNode.getLink(0) != NullTupLoc) {    jam();    treeRemoveSemi(frag, glbNode, 0);    return;  }  treeRemoveLeaf(frag, glbNode);}/* * Handle semi-leaf after removing an entry.  Move entries from leaf to * semi-leaf to bring semi-leaf occupancy above minOccup, if possible. * The leaf may become empty. */voidDbtux::treeRemoveSemi(Frag& frag, NodeHandle semiNode, unsigned i){  TreeHead& tree = frag.m_tree;  ndbrequire(semiNode.getChilds() < 2);  TupLoc leafLoc = semiNode.getLink(i);  NodeHandle leafNode(frag);  selectNode(leafNode, leafLoc);  if (semiNode.getOccup() < tree.m_minOccup) {    jam();    unsigned cnt = min(leafNode.getOccup(), tree.m_minOccup - semiNode.getOccup());    nodeSlide(semiNode, leafNode, cnt, i);    if (leafNode.getOccup() == 0) {      // remove empty leaf      jam();      treeRemoveNode(frag, leafNode);    }  }}/* * Handle leaf after removing an entry.  If parent is semi-leaf, move * entries to it as in the semi-leaf case.  If parent is interior node, * do nothing. */voidDbtux::treeRemoveLeaf(Frag& frag, NodeHandle leafNode){  TreeHead& tree = frag.m_tree;  TupLoc parentLoc = leafNode.getLink(2);  if (parentLoc != NullTupLoc) {    jam();    NodeHandle parentNode(frag);    selectNode(parentNode, parentLoc);    unsigned i = leafNode.getSide();    if (parentNode.getLink(1 - i) == NullTupLoc) {      // parent is semi-leaf      jam();      if (parentNode.getOccup() < tree.m_minOccup) {        jam();        unsigned cnt = min(leafNode.getOccup(), tree.m_minOccup - parentNode.getOccup());        nodeSlide(parentNode, leafNode, cnt, i);      }    }  }  if (leafNode.getOccup() == 0) {    jam();    // remove empty leaf    treeRemoveNode(frag, leafNode);  }}/* * Remove empty leaf. */voidDbtux::treeRemoveNode(Frag& frag, NodeHandle leafNode){  TreeHead& tree = frag.m_tree;  ndbrequire(leafNode.getChilds() == 0);  TupLoc parentLoc = leafNode.getLink(2);  unsigned i = leafNode.getSide();  deleteNode(leafNode);  if (parentLoc != NullTupLoc) {    jam();    NodeHandle parentNode(frag);    selectNode(parentNode, parentLoc);    parentNode.setLink(i, NullTupLoc);    // re-balance the tree    treeRemoveRebalance(frag, parentNode, i);    return;  }  // tree is now empty  tree.m_root = NullTupLoc;}/* * Re-balance tree after removing a node.  The process starts with the * parent of the removed node. */voidDbtux::treeRemoveRebalance(Frag& frag, NodeHandle node, unsigned i){  while (true) {    // height of subtree i has decreased by 1    int j = (i == 0 ? -1 : +1);    int b = node.getBalance();    if (b == 0) {      // perfectly balanced      jam();      node.setBalance(-j);      // height of tree did not change - done      return;    } else if (b == j) {      // height of longer subtree has decreased      jam();      node.setBalance(0);      // height change propagates up    } else if (b == -j) {      // height of shorter subtree has decreased      jam();      // child on the other side      NodeHandle childNode(frag);      selectNode(childNode, node.getLink(1 - i));      int b2 = childNode.getBalance();      if (b2 == b) {        jam();        treeRotateSingle(frag, node, 1 - i);        // height of tree decreased and propagates up      } else if (b2 == -b) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品亚洲777人妖| 日本不卡的三区四区五区| 精品国产精品一区二区夜夜嗨| 欧美在线视频你懂得| 色婷婷av一区二区三区gif| 99在线精品观看| 99久久久久久| 一本大道久久a久久综合| 97久久超碰国产精品电影| 一本久道久久综合中文字幕 | 一本大道av伊人久久综合| 粉嫩绯色av一区二区在线观看| 国产在线不卡视频| 成人午夜精品一区二区三区| 不卡一区在线观看| 91丨porny丨首页| 欧美色网站导航| 日韩一区二区影院| 国产日产欧美一区二区视频| 国产精品国产三级国产| 亚洲高清视频中文字幕| 久久精工是国产品牌吗| 国产91高潮流白浆在线麻豆| 97久久精品人人做人人爽50路| 日本韩国一区二区| 日韩一区二区电影网| 久久久久久久综合日本| 亚洲乱码中文字幕| 美女性感视频久久| 成人ar影院免费观看视频| 欧美日韩在线综合| 久久久九九九九| 亚洲综合成人在线| 国产综合久久久久久久久久久久 | 成人性视频免费网站| 99re免费视频精品全部| 91麻豆精品国产无毒不卡在线观看| 日韩一级二级三级| 中文一区二区完整视频在线观看| 亚洲在线成人精品| 久久97超碰国产精品超碰| 91啦中文在线观看| 26uuu精品一区二区在线观看| 一区二区三区四区国产精品| 国产一区二区三区美女| 欧美日韩aaaaa| 亚洲欧洲性图库| 国产一区二区三区四区五区入口| 欧美丝袜自拍制服另类| 日本一区二区三区视频视频| 日韩精品欧美成人高清一区二区| 国产69精品久久99不卡| 欧美tk—视频vk| 手机精品视频在线观看| 91污片在线观看| 欧美国产97人人爽人人喊| 久久精品国产一区二区三 | 亚洲成av人片| 色综合久久99| 中文字幕在线不卡一区二区三区| 老司机午夜精品| 91精品国产色综合久久久蜜香臀| 亚洲三级在线免费观看| jlzzjlzz亚洲女人18| 国产日韩视频一区二区三区| 日本视频免费一区| 91精品婷婷国产综合久久| 亚洲国产色一区| 欧美色倩网站大全免费| 一区二区成人在线观看| 色欧美日韩亚洲| 亚洲日本电影在线| 99国产精品久| 亚洲日本青草视频在线怡红院| 成人免费毛片app| 国产欧美日韩另类视频免费观看| 国模大尺度一区二区三区| 26uuu亚洲综合色| 黄色日韩网站视频| 久久久精品tv| www.综合网.com| 亚洲精品免费在线| 在线免费观看日本欧美| 亚洲chinese男男1069| 欧美日韩国产大片| 麻豆精品蜜桃视频网站| www精品美女久久久tv| 国产一区二区三区观看| 国产精品伦一区| 91视频com| 日韩影院免费视频| 精品国一区二区三区| 国产99久久久国产精品潘金| 亚洲日穴在线视频| 欧美丰满一区二区免费视频| 久久97超碰色| 国产精品成人午夜| 欧美日韩国产一级片| 精品一区二区三区蜜桃| 国产精品嫩草99a| 欧洲精品一区二区三区在线观看| 三级一区在线视频先锋| 久久精品在线观看| 在线观看一区二区精品视频| 美日韩黄色大片| 亚洲欧洲国产日本综合| 欧美日韩国产高清一区| 国产99精品视频| 无码av中文一区二区三区桃花岛| www国产成人| 欧美日韩一区二区在线观看| 精品一二三四区| 一区二区三区在线视频播放| 日韩精品一区二区三区蜜臀| 97精品久久久久中文字幕| 日韩va亚洲va欧美va久久| 亚洲欧洲精品成人久久奇米网 | 男女男精品视频网| 中文字幕日韩一区二区| 欧美不卡激情三级在线观看| 91成人网在线| 成人污视频在线观看| 蜜桃视频一区二区三区在线观看| 中文字幕欧美国产| 精品剧情v国产在线观看在线| 94色蜜桃网一区二区三区| 精品综合免费视频观看| 亚洲一区二区欧美| 亚洲色欲色欲www在线观看| 精品国产91洋老外米糕| 7777精品伊人久久久大香线蕉完整版| 国产揄拍国内精品对白| 青青草精品视频| 亚洲午夜一区二区三区| 国产精品进线69影院| 久久精品亚洲国产奇米99| 日韩美女在线视频| 欧美精品vⅰdeose4hd| 色狠狠一区二区三区香蕉| 岛国精品在线观看| 国产精品羞羞答答xxdd| 精品无人区卡一卡二卡三乱码免费卡| 午夜激情一区二区三区| 夜夜嗨av一区二区三区| 亚洲精品视频一区二区| 18成人在线观看| 亚洲国产精品高清| 国产蜜臀97一区二区三区| 国产视频一区二区在线| 国产丝袜在线精品| 中文字幕+乱码+中文字幕一区| 久久久亚洲精品一区二区三区| 欧美电视剧免费全集观看| 欧美人与禽zozo性伦| 91.麻豆视频| 91精品国产91久久综合桃花| 日韩一区二区视频在线观看| 日韩一级大片在线| 久久久亚洲高清| 欧美激情中文字幕一区二区| 国产精品少妇自拍| 亚洲欧洲精品天堂一级| 亚洲精品ww久久久久久p站| 亚洲综合偷拍欧美一区色| 视频一区国产视频| 激情六月婷婷综合| 风间由美中文字幕在线看视频国产欧美| 国产精品综合网| 91一区二区在线| 在线不卡中文字幕| 精品国产亚洲在线| 国产精品美女久久久久久2018| 亚洲情趣在线观看| 爽好久久久欧美精品| 激情丁香综合五月| 91年精品国产| 91精品午夜视频| 国产精品无圣光一区二区| 亚洲精品成a人| 另类中文字幕网| gogo大胆日本视频一区| 精品视频在线视频| 久久美女艺术照精彩视频福利播放 | 亚洲免费看黄网站| 五月天亚洲婷婷| 国产成人免费视频精品含羞草妖精| 99免费精品在线观看| 91精品国产一区二区人妖| 日本一区二区三区视频视频| 亚洲成人激情av| 国产精品一二三四| 欧美三级日韩三级| 中文在线资源观看网站视频免费不卡| 1024亚洲合集| 狠狠色丁香婷婷综合| 色综合天天天天做夜夜夜夜做| 欧美成人精品福利| 亚洲福利一区二区| 99国产精品视频免费观看| 精品久久国产97色综合|