1 package com.daffodilwoods.daffodildb.server.datasystem.indexsystem; 2 3 import com.daffodilwoods.daffodildb.server.datasystem.btree.*; 4 import com.daffodilwoods.database.resource.DException; 5 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._DatabaseUser; 6 7 public class MemoryNode implements _Node { 8 9 private BTreeElement[] nodeElements; 10 private int elementCount; 11 private short level; 12 private static int nodeSize; 13 private BTreeNode nextNode; 14 private BTreeNode previousNode; 15 private boolean isLeafNode = true; 16 private BTreeNode parentNode; 17 27 private boolean isCanBeRemovedFromMap ; 28 29 30 31 public MemoryNode(int nodeSize0) throws DException { 32 nodeSize = nodeSize0; 33 nodeElements = new BTreeElement[nodeSize]; 34 isCanBeRemovedFromMap = true; 35 } 36 37 38 public void insert(int position, BTreeElement btreeElement,boolean flag) throws DException { 39 nodeElements[position] = btreeElement; 40 btreeElement.setPosition(position); 41 } 42 43 public void delete(int position) throws DException { 44 if(!isLeafNode) 45 throw new DException("DSE2041",null); 46 BTreeElement element; 47 for(int i = position ; i < getElementCount() - 1 ; i++ ){ 48 element = getElement(i+1); 49 update(i,element,false); 50 } 51 updateElementCount(false); 52 } 53 54 public void updateBtree(BTreeKey btreekey,Object newKey,Object newValue) throws DException{ 55 BTreeElement element = nodeElements[btreekey.getPosition()] ; 56 element.setKey(newKey); 57 element.setValue(newValue); 58 } 59 60 public BTreeElement getElement(int index) throws DException { 61 try { 62 return nodeElements[index]; 63 }catch (ArrayIndexOutOfBoundsException ex) { 64 throw new DException("DSE2043",new Object [] {new Integer (index),new Integer (getElementCount())}); 65 } 66 } 67 68 public boolean isLeafNode() throws DException { 69 return isLeafNode; 70 } 71 72 public void updateNode(int position,boolean flag) throws DException{ 73 if(getElementCount() >= nodeSize) 74 throw new DException("DSE2044",null); 75 for( int i = elementCount ; i > position ; i-- ){ 76 insert(i,getElement(i-1),flag); 77 } 78 } 79 80 81 public Object getParentNode(_DatabaseUser user) throws DException{ 82 return parentNode; 83 } 84 85 public int getElementCount()throws DException{ 86 return elementCount; 87 } 88 89 private void update(int position, BTreeElement element, boolean flag) throws DException { 90 nodeElements[position] = element; 91 element.setPosition(position); 92 } 93 94 100 101 public BTreeElement createElement(boolean leaf,_DatabaseUser user, Object key,Object value,BTreeNode leftNode,BTreeNode childNode) throws DException{ 102 return new BTreeElement(key,value); 103 } 104 105 public short getLevel(){ 106 return level; 107 } 108 109 public void setLevel(short level0) throws DException{ 110 level = level0; 111 } 112 113 public void updateElementCount(boolean increase) throws DException{ 114 elementCount += increase ? 1 : -1; 115 } 116 117 public int getSplitPoint() throws DException{ 118 return nodeSize/2 + 1; 119 } 120 121 public void insertRange(Object element ,int startPosition,int endPosition)throws DException{ 122 BTreeElement [] elements = (BTreeElement[])element; 123 BTreeElement btreeElement; 124 int count = 0; 125 for(int i = startPosition,j=1 ; i <= endPosition ; i++){ 126 count++; 127 btreeElement = elements[i]; 128 insert(j++,btreeElement,false); 129 updateElementCount(true); 130 } 131 } 132 133 public void deleteRange(int startPosition,int endPosition)throws DException{ 134 elementCount = endPosition - startPosition +1; 135 } 136 137 public Object getElements()throws DException{ 138 return nodeElements; 139 } 140 141 public Object getNextNode(_DatabaseUser user)throws DException { 142 return nextNode; 143 } 144 145 public Object getPreviousNode(_DatabaseUser user)throws DException { 146 return previousNode; 147 } 148 149 public Object getNodeKey() throws DException{ 150 return btreeNode; 151 } 152 153 public void setNextNode(BTreeNode node0)throws DException { 154 nextNode = node0; 155 } 156 157 public void setPreviousNode(BTreeNode node0)throws DException { 158 previousNode = node0; 159 } 160 161 public void setLeafNode(boolean flag)throws DException{ 162 isLeafNode = flag; 163 } 164 165 public void insertDummyElement(BTreeElement element) throws DException { 166 nodeElements[0] = element; 167 nodeElements[0].setPosition(0); 168 elementCount += 1; 169 } 170 171 public void setParentNode(BTreeNode node) throws DException { 172 parentNode = node; 173 } 174 175 176 public void updateChild(int position,Object key) throws DException{ 177 178 throw new java.lang.UnsupportedOperationException ("Method getParentElement() not yet implemented."); 179 } 180 181 BTreeNode btreeNode; 182 public void setNode(BTreeNode node) { 183 btreeNode = node; 184 } 185 186 public Object getKey(int index) throws DException{ 187 return getElement(index).getKey(); 188 } 189 190 public Object getChildNodeKey(int position) throws DException{ 191 return getElement(position).getChild(); 192 } 193 194 public Object getValue(int index) throws DException{ 195 return getElement(index).getValue(); 196 } 197 public void setIsNodeCanBeRemovedFromMap(boolean isNodeCanBeRemovedFromMap){ 198 isCanBeRemovedFromMap = isNodeCanBeRemovedFromMap; 199 } 200 201 public boolean isNodeCanBeRemovedFromMap(){ 202 return isCanBeRemovedFromMap; 203 } 204 205 } 206 207 | Popular Tags |