NAME Tree::Node - Memory-efficient tree nodes in Perl REQUIREMENTS Perl 5.6.0 or newer is required. Only core modules are used. A C compiler to is required to build the module. (There is no Pure-perl version because this package was written to overcome limitations of Perl. See the DESCRIPTION section below.) INSTALLATION Installation can be done using the traditional Makefile.PL method: perl Makefile.PL make make test make install (On Windows platforms you should use `nmake' instead.) SYNOPSIS use Tree::Node; $node = Tree::Node->new(2); $node->set_child(0, $left); $node->set_child(1, $right); while ($node->key_cmp($key) < 0) { $node = $node->get_child(0); } DESCRIPTION This module implements a memory-efficient node type (for trees, skip lists and similar data structures) for Perl. You may ask "Why bother implementing an ordered structure such as a tree when Perl has hashes built-in?" Since Perl is optimized for speed over memory usage, hashes (and lists) use a lot of memory. Using Devel::Size for a reference, a list with four elements (corresponding to a key, value, and two child node pointers) will use at least 120 bytes. A hash with four key/value pairs will use at least 228 bytes. But an equivalent Tree::Node object will use at least 68 bytes. (However, see the KNOWN ISSUES section below for caveats regarding memory usage.) So the purpose of this package is to provide a simple low-level Node class which can be used as a base class to implement various kinds of tree structures. Each node has a key/value pair and a variable number of "children" pointers. How nodes are organized or the algorithm used to organize them is for you to implement. REVISION HISTORY The following changes have been made since the last release: 0.08 Fri 20 Jul 2007 - minor tweaks and typo corrections 0.07 Fri 13 Jul 2007 - distro is no longer signed (due to Module:Signature issues) - fixed error with reading undefined key or value - added force_set_key mode to change key - test for leaks in procedural interface - improved pointer cast - minor changes to Build.PL See the Changes file for a more detailed revision history. KNOWN ISSUES This module implements a Perl wrapper around a C struct, which for the object-oriented inferface involves a blessed reference to a pointer to the struct. This overhead of about 45 bytes may make up for any memory savings that the C-based struct provided! So if you what you are doing is implementing a simple key/value lookup, then you may be better off sticking with hashes. If what you are doing requires a special structure that cannot be satisfied with hashes (even sorted hashes), or requires a very large number of nodes, then this module may be useful to you. Another alternative is to use the Procedural Interface. SEE ALSO Tree::DAG_Node is written in pure Perl, but it offers a more flexible interface. AUTHOR Robert Rothenberg Suggestions and Bug Reporting Feedback is always welcome. Please use the CPAN Request Tracker at http://rt.cpan.org to submit bug reports. LICENSE Copyright (c) 2005,2007 Robert Rothenberg. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.