Skip to content

A simple segment tree writen in PHP. Provide several specific kinds of segment tree.

License

Notifications You must be signed in to change notification settings

swangoframework/swango-segment_tree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Swango\SegmentTree

Php Version SegmentTree License

Easy segment tree in PHP. Support multi key-value storage. Written without any global variable. Can be used in all kinds of environment.

Common segment tree

$tree = Swango\SegmentTree\Tree\Common::newTree(0,100000); // Create a tree with scale of 0~100000;

// Set to use "==" when comparing values. Two objects of different instances that have same content will be considered equal.
$tree->useDoubleEqualSign();
// Set to use "===" when comparing values. Two objects of different instances will be considered not equal no matter their content.
$tree->useTripleEqualSign();

// Accept all kinds of values including string, number, null, bool, array, object, etc. 
$tree->setValue(100, 1000, 'key1', 123);
$tree->setValue(20000, 20400, 'key1', null);
$tree->setValue(21000, 30000, 'key1', false);
$tree->setValue(20005, 21005, 'key1', [1, 2, 3]);
$tree->setValue(50000, 60000, 'key2', new \SplQueue());
$tree->setValue(99999, 100000, 'key3', 'some value');

// Get value of certain position.
var_dump($tree->getValue(20006, 'key1'));

// Delete value of between certain positions.
$tree->delValue(30000, 100000, 'key1');

// Throws exception when value not found.
var_dump($tree->getValue(70000, 'key1'));

// Get segment arrays.
var_dump($tree->getSegmentsOfGivenKey('key1'));
var_dump($tree->getSegmentsOfGivenKeyAndValue('key1', [1, 2, 3]));

// Remove all redundant nodes in the tree to reduce memory cost.
$tree->optimize();

// Clear all values and child nodes and make it a new tree.
$tree->clear();

Version compressed segment tree

$tree = Swango\SegmentTree\Tree\Version::newTree(
    '1.0.0', '1.0.1', '1.0.2', '1.0.3', '1.1.0', '1.4.1', '2.0.0', '2.0.1-RC1', '3.0.0'
); // Create a tree with versions. These versions will be sorted using version_compare() and remove all duplicated

// All methods are similar with Common tree.
$tree->setValue('1.0.2', '2.0.0', 'key1', true);
var_dump($tree->getValue('1.1.0'));

Date compressed segment tree

$tree = Swango\SegmentTree\Tree\Date::newTree(
    '2020-09-25', '2020-12-12'
); // Create a tree with dates. 

// All methods are similar with Common tree.
$tree->setValue('2020-09-29', '2020-11-11', 'key1', true);
var_dump($tree->getValue('2020-11-01'));

About

A simple segment tree writen in PHP. Provide several specific kinds of segment tree.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages