The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Tree::SizeBalanced - Size balanced binary search tree (XS implementation)

Handy for in-memory realtime ranking systems.

SYNOPSIS

  use Tree::SizeBalanced; # use $tree = Tree::SizeBalanced::int_any->new
  use Tree::SizeBalanced qw(:long); # use $tree = sbtree_int_any;
  use Tree::SizeBalanced qw(:short); # use $tree = sbtreeia;
  use Tree::SizeBalanced qw(:all); # export :short and :long

  my $tree_map_any_any = sbtree_any_any { length($b) <=> length($a) };
  my $tree_map_any_any = sbtreeaa { length($b) <=> length($a) }; # shorter form
  my $tree_map_any_any = Tree::SizeBalanced::any_any->new
    sub { length($b) <=> length($a) }; # full form
  # tree map with any scalars as keys

  my $tree_set_num = sbtree_num_void;
  my $tree_set_num = sbtreen; # shorter form
  my $tree_set_num = Tree::SizeBalanced::num_void->new; # full form
  # or set version.
  #  This one use numeric values (floating point numbers) as keys

  my $tree = sbtree_int_any;
  my $tree = sbtreeia; # shorter form
  my $tree = Tree::SizeBalanced::int_any->new; # full form
  # tree map (key value pairs)
  #  the keys are signed integers
  #  the values are any scalars

  $tree->insert(1, {a => 3});

  ...

  my $count = $tree->count_lt(25);
  # how many entries in the tree whose key is less than 25
  my $count = $tree->count_gt(25);
  # how many entries in the tree whose key is greater than 25

  ($key, $value) = $tree->skip_l(23);
  $key = $tree->skip_l(23);
  # Get the first (smallest) entry whose key is greater than 23

  ($key, $value) = $tree->skip_g(23);
  $key = $tree->skip_g(23);
  # Get the first (largest) entry whose key is less than 23

  ($key, $value) = $tree->find_min;
  $key = $tree->find_min;
  ($key, $value) = $tree->find_max;
  $key = $tree->find_max;

  ($k1, $v1, $k2, $v2) = $tree->find_min(2);
  ($k1, $v1, $k2, $v2, $k3, $v3) = $tree->find_min(3);
  ($k1, $v1, $k2, $v2, $k3, $v3, ...) = $tree->find_min(-1);

  ($k1, $v1, ...= $tree->find_lt_gt($lower_bound, $upper_bound);

  ...

  $tree->delete(1);

DESCRIPTION

Quoted from http://wcipeg.com/wiki/Size_Balanced_Tree:

> A size balanced tree (SBT) is a self-balancing binary search tree (BBST) first published by Chinese student Qifeng Chen in 2007. The tree is rebalanced by examining the sizes of each node's subtrees. Its abbreviation resulted in many nicknames given by Chinese informatics competitors, including "sha bi" tree (Chinese: 傻屄树; pinyin: shǎ bī shù; literally meaning "dumb cunt tree") and "super BT", which is a homophone to the Chinese term for snot (Chinese: 鼻涕; pinyin: bítì) suggesting that it is messy to implement. Contrary to what its nicknames suggest, this data structure can be very useful, and is also known to be easy to implement. Since the only extra piece of information that needs to be stored is sizes of the nodes (instead of other "useless" fields such as randomized weights in treaps or colours in red–black tress), this makes it very convenient to implement the select-by-rank and get-rank operations (easily transforming it into an order statistic tree). It supports standard binary search tree operations such as insertion, deletion, and searching in O(log n) time. According to Chen's paper, "it works much faster than many other famous BSTs due to the tendency of a perfect BST in practice."

For performance consideration, this module provides trees with many stricter types.

If you choose any scalar as the key type, you must provide a comparing sub. The comparing sub should exammed localized $a and $b (or $::a and $::b if there are introduced lexical <$a> and <$b> right outside the sub). And if your comparing sub using an indirect way to judge the size of the keys, don't do anything that will change the judge result. Or, the tree will be confused and give you incorrect results.

If you put more than one entries with equal-sized keys, the insertion order is preserved by treating the first one as the smallest one among them.

PS. Qifeng Chen is 陈启峰 in simplified Chinese.

This module has been tested on perl version 5.8.9, 5.10.1, 5.12.5, 5.14.4, 5.16.3, 5.18.4, 5.20.3, 5.22.2

EXPORT

All exported subs are different style ways to create new trees.

(nothing)

Without importing anything, you can use the full form to obtain a new tree:

  my $tree = Tree::SizeBalanced::str_any->new;
:long

With the long form:

  my $tree = sbtree_any_str { length($a) <=> length($b) || $a cmp $b };
:short

With the short form:

  my $tree = sbtreei;
:all = :short + :long

Different trees with different types

Tree::SizeBalanced::int_void

Tree set with key type signed integers (32bits or 64bits according to your perl version).

$tree = Tree::SizeBalanced::int_void->new
$tree = sbtree_int_void
$tree = sbtreei

Creat a new empty tree.

$tree->insert($key)
$tree->insert_after($key)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $key2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $key2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::int_int

Tree map with key type signed integers (32bits or 64bits according to your perl version) and value type signed integers (32bits or 64bits according to your perl version).

$tree = Tree::SizeBalanced::int_int->new
$tree = sbtree_int_int
$tree = sbtreeii

Creat a new empty tree.

$tree->insert($key, $value)
$tree->insert_after($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::int_num

Tree map with key type signed integers (32bits or 64bits according to your perl version) and value type numeric numbers (floating point numbers).

$tree = Tree::SizeBalanced::int_num->new
$tree = sbtree_int_num
$tree = sbtreein

Creat a new empty tree.

$tree->insert($key, $value)
$tree->insert_after($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::int_any

Tree map with key type signed integers (32bits or 64bits according to your perl version) and value type any scalars.

$tree = Tree::SizeBalanced::int_any->new
$tree = sbtree_int_any
$tree = sbtreeia

Creat a new empty tree.

$tree->insert($key, $value)
$tree->insert_after($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::num_void

Tree set with key type numeric numbers (floating point numbers).

$tree = Tree::SizeBalanced::num_void->new
$tree = sbtree_num_void
$tree = sbtreen

Creat a new empty tree.

$tree->insert($key)
$tree->insert_after($key)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $key2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $key2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::num_int

Tree map with key type numeric numbers (floating point numbers) and value type signed integers (32bits or 64bits according to your perl version).

$tree = Tree::SizeBalanced::num_int->new
$tree = sbtree_num_int
$tree = sbtreeni

Creat a new empty tree.

$tree->insert($key, $value)
$tree->insert_after($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::num_num

Tree map with key type numeric numbers (floating point numbers) and value type numeric numbers (floating point numbers).

$tree = Tree::SizeBalanced::num_num->new
$tree = sbtree_num_num
$tree = sbtreenn

Creat a new empty tree.

$tree->insert($key, $value)
$tree->insert_after($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::num_any

Tree map with key type numeric numbers (floating point numbers) and value type any scalars.

$tree = Tree::SizeBalanced::num_any->new
$tree = sbtree_num_any
$tree = sbtreena

Creat a new empty tree.

$tree->insert($key, $value)
$tree->insert_after($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::str_void

Tree set with key type strings.

$tree = Tree::SizeBalanced::str_void->new
$tree = sbtree_str_void
$tree = sbtrees

Creat a new empty tree.

$tree->insert($key)
$tree->insert_after($key)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $key2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $key2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::str_int

Tree map with key type strings and value type signed integers (32bits or 64bits according to your perl version).

$tree = Tree::SizeBalanced::str_int->new
$tree = sbtree_str_int
$tree = sbtreesi

Creat a new empty tree.

$tree->insert($key, $value)
$tree->insert_after($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::str_num

Tree map with key type strings and value type numeric numbers (floating point numbers).

$tree = Tree::SizeBalanced::str_num->new
$tree = sbtree_str_num
$tree = sbtreesn

Creat a new empty tree.

$tree->insert($key, $value)
$tree->insert_after($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::str_any

Tree map with key type strings and value type any scalars.

$tree = Tree::SizeBalanced::str_any->new
$tree = sbtree_str_any
$tree = sbtreesa

Creat a new empty tree.

$tree->insert($key, $value)
$tree->insert_after($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::any_void

Tree set with key type any scalars.

$tree = Tree::SizeBalanced::any_void->new sub { $a cmp $b }
$tree = sbtree_any_void { $a cmp $b }
$tree = sbtreea { $a cmp $b }

Creat a new empty tree.

$tree->insert($key)
$tree->insert_after($key)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $key2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $key2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $key2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $key2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::any_int

Tree map with key type any scalars and value type signed integers (32bits or 64bits according to your perl version).

$tree = Tree::SizeBalanced::any_int->new sub { $a cmp $b }
$tree = sbtree_any_int { $a cmp $b }
$tree = sbtreeai { $a cmp $b }

Creat a new empty tree.

$tree->insert($key, $value)
$tree->insert_after($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::any_num

Tree map with key type any scalars and value type numeric numbers (floating point numbers).

$tree = Tree::SizeBalanced::any_num->new sub { $a cmp $b }
$tree = sbtree_any_num { $a cmp $b }
$tree = sbtreean { $a cmp $b }

Creat a new empty tree.

$tree->insert($key, $value)
$tree->insert_after($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Tree::SizeBalanced::any_any

Tree map with key type any scalars and value type any scalars.

$tree = Tree::SizeBalanced::any_any->new sub { $a cmp $b }
$tree = sbtree_any_any { $a cmp $b }
$tree = sbtreeaa { $a cmp $b }

Creat a new empty tree.

$tree->insert($key, $value)
$tree->insert_after($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one after them.

$tree->insert_before($key, $value)

Insert an entry into the tree. If there are any entries with the same key size, insert the new one before them.

$tree->delete($key)
$tree->delete_last($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the last inserted one.

$tree->delete_first($key)

Delete one entry whose key is equal to $key. If there ary more than one entry with the same key size, delete the first inserted one.

$size = $tree->size

Get the number of entries in the tree

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find($key, $limit=1)
$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_first($key, $limit=1)

Get entries with key sizes equal to $key, from the first inserted one to the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_last($key, $limit=1)

Get entries with key sizes equal to $key, from the last inserted one to the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_lt($key, $limit=1)

Get entries, whose keys are smaller than $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_le($key, $limit=1)

Get entries, whose keys are smaller than or equal to $key, from the largest entry.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt($key, $limit=1)

Get entries, whose keys are greater than $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge($key, $limit=1)

Get entries, whose keys are greater than or equal to $key, from the smallest one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_lt($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_gt_le($lower_key, $upper_key)

Get entries, whose keys are greater than $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_lt($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_ge_le($lower_key, $upper_key)

Get entries, whose keys are greater than or equal to $lower_key and smaller than or equal to $upper_key, from the smallest one to the largest one.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_min($limit=1)

Get entries from the one with smallest key. If there are more than one entries with smallest key, begin from the first inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = $tree->find_max($limit=1)

Get entries from the one with largest key. If there are more than one entries with smallest key, begin from the last inserted one.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_l($offset, $limit=1)

Get the first entry from one with the smallest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$key or ($key1, $value1, $key2, $value2, ...) = &tree->skip_g($offset, $limit=1)

Get the first entry from one with the largest key after skipping $offset entries.

The optional $limit (default 1) indicates the maximum entry number you will get, $limit=-1 means unlimited.

$count = $tree->count_lt($key)

Get the number of entries whose keys are smaller than $key.

$count = $tree->count_le($key)

Get the number of entries whose keys are smaller than or equal to $key.

$count = $tree->count_gt($key)

Get the number of entries whose keys are greater than $key.

$count = $tree->count_ge($key)

Get the number of entries whose keys are greater than or equal to $key.

$dump_str = $tree->dump

Get a string which represent the whole tree structure. For debug use.

($order_consistent, $size_consistent, $balanced) = $tree->check

Check the tree property. For debug use.

$ever_height = $tree->ever_height

Get the maximum height the tree has ever been. For debug use

Default type constructors

$tree = Tree::SizeBalanced->new;

equivalent to $tree = Tree::SizeBalanced::int_any->new;

$tree = Tree::SizeBalanced->new sub { $a cmp $b };

equivalent to $tree = Tree::SizeBalanced::any_any->new;

$tree = sbtree;

equivalent to $tree = sbtreeia

$tree = sbtree { $a cmp $b };

equivalent to $tree = sbtreeaa

BENCHMARK

test result: (perl 5.22.2, Tree::SizeBalanced 2.6)

incremental integer query seed_count=10, data_size=100_000, verbose=0

    Benchmark: timing 1 iterations of Sorted array, Static array, tree set any, tree set int...
    Sorted array: 12 wallclock secs (12.60 usr +  0.00 sys = 12.60 CPU) @  0.08/s (n=1)
                (warning: too few iterations for a reliable count)
    ^CSIGINT!
    Static array: 737 wallclock secs (736.96 usr +  0.14 sys = 737.10 CPU) @  0.00/s (n=1)
                (warning: too few iterations for a reliable count)
    tree set any:  5 wallclock secs ( 4.70 usr +  0.01 sys =  4.71 CPU) @  0.21/s (n=1)
                (warning: too few iterations for a reliable count)
    tree set int:  1 wallclock secs ( 0.69 usr +  0.01 sys =  0.70 CPU) @  1.43/s (n=1)
                (warning: too few iterations for a reliable count)

    (Note that "Static array" didn't complete. It's interrupted)

incremental string query seed_count=10, data_size=100_000, verbose=0

    Benchmark: timing 1 iterations of Sorted array, Static array, tree set any, tree set str...
    Sorted array: 15 wallclock secs (15.28 usr +  0.00 sys = 15.28 CPU) @  0.07/s (n=1)
                (warning: too few iterations for a reliable count)
    ^CSIGINT!
    Static array: 673 wallclock secs (672.08 usr +  0.15 sys = 672.23 CPU) @  0.00/s (n=1)
                (warning: too few iterations for a reliable count)
    tree set any:  6 wallclock secs ( 6.65 usr +  0.00 sys =  6.65 CPU) @  0.15/s (n=1)
                (warning: too few iterations for a reliable count)
    tree set str:  2 wallclock secs ( 1.88 usr +  0.00 sys =  1.88 CPU) @  0.53/s (n=1)
                (warning: too few iterations for a reliable count)

    (Note that "Static array" didn't complete. It's interrupted)

bulk integer query seed_count=10, data_size=100_000, verbose=0

    Benchmark: timing 1 iterations of Sorted array, Static array, tree set any, tree set int...
    Sorted array:  3 wallclock secs ( 2.99 usr +  0.00 sys =  2.99 CPU) @  0.33/s (n=1)
                (warning: too few iterations for a reliable count)
    ^CSIGINT!
    Static array: 251 wallclock secs (251.85 usr +  0.02 sys = 251.87 CPU) @  0.00/s (n=1)
                (warning: too few iterations for a reliable count)
    tree set any:  6 wallclock secs ( 5.24 usr +  0.00 sys =  5.24 CPU) @  0.19/s (n=1)
                (warning: too few iterations for a reliable count)
    tree set int:  1 wallclock secs ( 0.86 usr +  0.00 sys =  0.86 CPU) @  1.16/s (n=1)
                (warning: too few iterations for a reliable count)

    (Note that "Static array" didn't complete. It's interrupted)

bulk string query seed_count=10, data_size=100_000, verbose=0

    Benchmark: timing 1 iterations of Sorted array, Static array, tree set any, tree set int...
    Sorted array:  5 wallclock secs ( 5.59 usr +  0.00 sys =  5.59 CPU) @  0.18/s (n=1)
                (warning: too few iterations for a reliable count)
    ^CSIGINT!
    Static array: 363 wallclock secs (361.56 usr +  0.07 sys = 361.63 CPU) @  0.00/s (n=1)
                (warning: too few iterations for a reliable count)
    tree set any:  8 wallclock secs ( 7.85 usr +  0.00 sys =  7.85 CPU) @  0.13/s (n=1)
                (warning: too few iterations for a reliable count)
    tree set int:  3 wallclock secs ( 3.27 usr +  0.01 sys =  3.28 CPU) @  0.30/s (n=1)
                (warning: too few iterations for a reliable count)

    (Note that "Static array" didn't complete. It's interrupted)

SEE ALSO

This mod's github https://github.com/CindyLinz/Perl-Tree-SizeBalanced. It's welcome to discuss with me when you encounter bugs, or if you think that some patterns are also useful but the mod didn't provide them yet.

Introduction to Size Balanced Tree http://wcipeg.com/wiki/Size_Balanced_Tree.

陈启峰's original paper https://drive.google.com/file/d/0B6NYSy8f6mQLOEpHdHh4U2hRcFk/view?usp=sharing, I found it from http://sunmoon-template.blogspot.tw/2015/01/b-size-balanced-tree.html.

AUTHOR

Cindy Wang (CindyLinz) <cindy@cpan.org>

COPYRIGHT AND LICENSE

Copyright (C) 2016 by CindyLinz

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.22.1 or, at your option, any later version of Perl 5 you may have available.

ACKNOWLEDGEMENT

Thank TDYa127 https://github.com/a127a127/ who tell me size balanced tree.