org.h2.mvstore
Class Page

java.lang.Object
  extended by org.h2.mvstore.Page

public class Page
extends java.lang.Object

A page (a node or a leaf).

For b-tree nodes, the key at a given index is larger than the largest key of the child at the same index.

File format: page length (including length): int check value: short map id: varInt number of keys: varInt type: byte (0: leaf, 1: node; +2: compressed) compressed: bytes saved (varInt) keys leaf: values (one for each key) node: children (1 more than keys)


Method Summary
 int binarySearch(java.lang.Object key)
          Search the key in this page using a binary search.
 Page copy(long version)
          Create a copy of this page.
static Page create(MVMap<?,?> map, long version, int keyCount, java.lang.Object[] keys, java.lang.Object[] values, int childCount, long[] children, Page[] childrenPages, long[] counts, long totalCount, int sharedFlags, int memory)
          Create a new page.
 boolean equals(java.lang.Object other)
           
 Page getChildPage(int index)
          Get the child page at the given index.
 int getChildPageCount()
           
 java.lang.Object getKey(int index)
          Get the key at the given index.
 int getKeyCount()
          Get the number of keys in this page.
 int getMemory()
           
 long getPos()
          Get the position of the page
 long getTotalCount()
          Get the total number of key-value pairs, including child pages.
 java.lang.Object getValue(int index)
          Get the value at the given index.
 int hashCode()
           
 void insertLeaf(int index, java.lang.Object key, java.lang.Object value)
          Insert a key-value pair into this leaf.
 void insertNode(int index, java.lang.Object key, Page childPage)
          Insert a child into this node.
 boolean isLeaf()
          Check whether this is a leaf page.
 void remove(int index)
          Remove the key and value (or child) at the given index.
 void removePage()
          Remove the page.
 void setChild(int index, Page c)
          Replace the child page.
 void setCounts(int index, Page c)
          Update the (descendant) count for the given child, if there was a change.
 void setKey(int index, java.lang.Object key)
          Replace the key.
 java.lang.Object setValue(int index, java.lang.Object value)
          Replace the value.
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Method Detail

create

public static Page create(MVMap<?,?> map,
                          long version,
                          int keyCount,
                          java.lang.Object[] keys,
                          java.lang.Object[] values,
                          int childCount,
                          long[] children,
                          Page[] childrenPages,
                          long[] counts,
                          long totalCount,
                          int sharedFlags,
                          int memory)
Create a new page. The arrays are not cloned.

Parameters:
map - the map
version - the version
keyCount - the number of keys
keys - the keys
values - the values
childCount - the number of children
children - the children
childrenPages - the children pages
counts - the children counts
totalCount - the total number of keys
sharedFlags - which arrays are shared
memory - the memory used in bytes
Returns:
the page

getKey

public java.lang.Object getKey(int index)
Get the key at the given index.

Parameters:
index - the index
Returns:
the key

getChildPage

public Page getChildPage(int index)
Get the child page at the given index.

Parameters:
index - the index
Returns:
the child page

getValue

public java.lang.Object getValue(int index)
Get the value at the given index.

Parameters:
index - the index
Returns:
the value

getKeyCount

public int getKeyCount()
Get the number of keys in this page.

Returns:
the number of keys

isLeaf

public boolean isLeaf()
Check whether this is a leaf page.

Returns:
true if it is a leaf

getPos

public long getPos()
Get the position of the page

Returns:
the position

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

copy

public Page copy(long version)
Create a copy of this page.

Parameters:
version - the new version
Returns:
a page with the given version

binarySearch

public int binarySearch(java.lang.Object key)
Search the key in this page using a binary search. Instead of always starting the search in the middle, the last found index is cached.

If the key was found, the returned value is the index in the key array. If not found, the returned value is negative, where -1 means the provided key is smaller than any keys in this page. See also Arrays.binarySearch.

Parameters:
key - the key
Returns:
the value or null

getTotalCount

public long getTotalCount()
Get the total number of key-value pairs, including child pages.

Returns:
the number of key-value pairs

setChild

public void setChild(int index,
                     Page c)
Replace the child page.

Parameters:
index - the index
c - the new child page

setCounts

public void setCounts(int index,
                      Page c)
Update the (descendant) count for the given child, if there was a change.

Parameters:
index - the index
c - the new child page

setKey

public void setKey(int index,
                   java.lang.Object key)
Replace the key.

Parameters:
index - the index
key - the new key

setValue

public java.lang.Object setValue(int index,
                                 java.lang.Object value)
Replace the value.

Parameters:
index - the index
value - the new value
Returns:
the old value

insertLeaf

public void insertLeaf(int index,
                       java.lang.Object key,
                       java.lang.Object value)
Insert a key-value pair into this leaf.

Parameters:
index - the index
key - the key
value - the value

insertNode

public void insertNode(int index,
                       java.lang.Object key,
                       Page childPage)
Insert a child into this node.

Parameters:
index - the index
key - the key
childPage - the child page

remove

public void remove(int index)
Remove the key and value (or child) at the given index.

Parameters:
index - the index

getChildPageCount

public int getChildPageCount()

equals

public boolean equals(java.lang.Object other)
Overrides:
equals in class java.lang.Object

hashCode

public int hashCode()
Overrides:
hashCode in class java.lang.Object

getMemory

public int getMemory()

removePage

public void removePage()
Remove the page.