ucommon  7.0.0
About: GNU uCommon C++ is a portable and optimized class framework for writing C++ applications that need to use threads and support concurrent synchronization, and that use sockets, XML parsing, object serialization, thread-optimized string and data structure classes, etc..
  Fossies Dox: ucommon-7.0.0.tar.gz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

Loading...
Searching...
No Matches
ucommon::NamedTree Class Reference

The named tree class is used to form a tree oriented list of associated objects. More...

#include <linked.h>

Inheritance diagram for ucommon::NamedTree:
[legend]
Collaboration diagram for ucommon::NamedTree:
[legend]

Public Member Functions

NamedTreefind (const char *name) const
 Find a child node of our object with the specified name. More...
 
NamedTreepath (const char *path) const
 Find a subnode by a dot separated list of node names. More...
 
NamedTreeleaf (const char *name) const
 Find a child leaf node of our object with the specified name. More...
 
NamedTreegetChild (const char *name) const
 Find a direct child of our node which matches the specified name. More...
 
NamedTreegetLeaf (const char *name) const
 Find a direct leaf node on our node. More...
 
NamedTreegetFirst (void) const
 Get first child node in our ordered list of children. More...
 
NamedTreegetParent (void) const
 Get parent node we are listed as a child on. More...
 
NamedTreegetIndexed (unsigned index) const
 Get child by index number. More...
 
OrderedIndexgetIndex (void) const
 Get the ordered index of our child nodes. More...
 
 operator bool () const
 Test if this node has a name. More...
 
bool operator! () const
 Test if this node is unnamed. More...
 
void setId (char *name)
 Set or replace the name id of this node. More...
 
void remove (void)
 Remove our node from our parent list. More...
 
bool is_leaf (void) const
 Test if node has children. More...
 
bool is_root (void) const
 Test if node is root node. More...
 
void relistTail (NamedTree *trunk)
 Add leaf to a trunk, by order. More...
 
void relistHead (NamedTree *trunk)
 Add leaf to a trunk, by reverse order. More...
 
void relist (NamedTree *trunk=NULL)
 Default relist is by tail... More...
 
- Public Member Functions inherited from ucommon::NamedObject
void add (NamedObject **hash, char *name, unsigned size=1)
 Add object to hash indexed list. More...
 
NamedObjectgetNext (void) const
 Get next effective object when iterating. More...
 
char * getId (void) const
 Get the named id string of this object. More...
 
virtual int compare (const char *name) const
 Compare the name of our object to see if equal. More...
 
bool equal (const char *name) const
 Equal function which calls compare. More...
 
bool operator== (const char *name) const
 Comparison operator between our name and a string. More...
 
bool operator!= (const char *name) const
 Comparison operator between our name and a string. More...
 
- Public Member Functions inherited from ucommon::OrderedObject
void enlistTail (OrderedIndex *index)
 List our ordered object at end of a linked list on an index. More...
 
void enlistHead (OrderedIndex *index)
 List our ordered object at start of a linked list on an index. More...
 
virtual void enlist (OrderedIndex *index)
 List our ordered object in default strategy mode. More...
 
void delist (OrderedIndex *index)
 Remove our ordered object from an existing index. More...
 
OrderedObjectgetNext (void) const
 Get next ordered member when iterating. More...
 
- Public Member Functions inherited from ucommon::LinkedObject
virtual ~LinkedObject ()
 
virtual void release (void) __OVERRIDE
 Release list, mark as no longer linked. More...
 
virtual void retain (void) __OVERRIDE
 Retain by marking as self referenced list. More...
 
void enlist (LinkedObject **root)
 Add our object to an existing linked list through a pointer. More...
 
void delist (LinkedObject **root)
 Locate and remove ourselves from a list of objects. More...
 
bool is_member (LinkedObject *list) const
 Search to see if we are a member of a specific list. More...
 
LinkedObjectgetNext (void) const
 Get next effective object when iterating. More...
 

Protected Member Functions

 NamedTree (char *name=NULL)
 Create a stand-alone or root tree node, with an optional name. More...
 
 NamedTree (NamedTree *parent, char *name)
 Create a tree node as a child of an existing node. More...
 
 NamedTree (const NamedTree &source)
 Construct a copy of the tree. More...
 
virtual ~NamedTree ()
 Delete node in a tree. More...
 
void purge (void)
 Performs object destruction. More...
 
- Protected Member Functions inherited from ucommon::NamedObject
 NamedObject ()
 Create an empty unnamed cell object. More...
 
 NamedObject (NamedObject **hash, char *name, unsigned size=1)
 Create a named object and add to hash indexed list. More...
 
 NamedObject (OrderedIndex *index, char *name)
 Created a named object on an ordered list. More...
 
 ~NamedObject ()
 Destroy named object. More...
 
virtual void clearId (void)
 The behavior of clearing id's can be overridden if they are not assigned as strdup's from the heap... More...
 
- Protected Member Functions inherited from ucommon::OrderedObject
 OrderedObject (OrderedIndex *index)
 Construct an ordered object aot end of a an index. More...
 
 OrderedObject ()
 Construct an ordered object unattached. More...
 
 OrderedObject (const OrderedObject &from)
 
- Protected Member Functions inherited from ucommon::LinkedObject
 LinkedObject (LinkedObject **root)
 Construct base class attached to a chain of objects. More...
 
 LinkedObject ()
 Construct base class unattached to anyone. More...
 
 LinkedObject (const LinkedObject &from)
 

Protected Attributes

NamedTreeParent
 
OrderedIndex Child
 
- Protected Attributes inherited from ucommon::NamedObject
char * Id
 
- Protected Attributes inherited from ucommon::LinkedObject
LinkedObjectNext
 

Additional Inherited Members

- Static Public Member Functions inherited from ucommon::NamedObject
static void purge (NamedObject **hash, unsigned size)
 Purge a hash indexed table of named objects. More...
 
static NamedObject ** index (NamedObject **hash, unsigned size)
 Convert a hash index into a linear object pointer array. More...
 
static unsigned count (NamedObject **hash, unsigned size)
 Count the total named objects in a hash table. More...
 
static NamedObjectfind (NamedObject *root, const char *name)
 Find a named object from a simple list. More...
 
static NamedObjectremove (NamedObject **root, const char *name)
 Remove a named object from a simple list. More...
 
static NamedObjectmap (NamedObject **hash, const char *name, unsigned size)
 Find a named object through a hash map table. More...
 
static NamedObjectremove (NamedObject **hash, const char *name, unsigned size)
 Remove an object from a hash map table. More...
 
static NamedObjectskip (NamedObject **hash, NamedObject *current, unsigned size)
 Iterate through a hash map table. More...
 
static unsigned keyindex (const char *name, unsigned size)
 Internal function to convert a name to a hash index number. More...
 
static NamedObject ** sort (NamedObject **list, size_t count=0)
 Sort an array of named objects in alphabetical order. More...
 
- Static Public Member Functions inherited from ucommon::LinkedObject
static void purge (LinkedObject *root)
 Release all objects from a list. More...
 
static unsigned count (const LinkedObject *root)
 Count the number of linked objects in a list. More...
 
static LinkedObjectgetIndexed (LinkedObject *root, unsigned index)
 Get member by index. More...
 

Detailed Description

The named tree class is used to form a tree oriented list of associated objects.

Typical uses for such data structures might be to form a parsed XML document, or for forming complex configuration management systems or for forming system resource management trees.

Author
David Sugar dyfet.nosp@m.@gnu.nosp@m.telep.nosp@m.hony.nosp@m..org

Definition at line 575 of file linked.h.

Constructor & Destructor Documentation

◆ NamedTree() [1/3]

ucommon::NamedTree::NamedTree ( char *  name = NULL)
protected

Create a stand-alone or root tree node, with an optional name.

Parameters
namefor this node.

Definition at line 426 of file linked.cpp.

References ucommon::NamedObject::Id, and Parent.

◆ NamedTree() [2/3]

ucommon::NamedTree::NamedTree ( NamedTree parent,
char *  name 
)
protected

Create a tree node as a child of an existing node.

Parameters
parentnode we are listed under.
nameof our node.

Definition at line 440 of file linked.cpp.

References Child, ucommon::OrderedObject::enlistTail(), ucommon::NamedObject::Id, and Parent.

Here is the call graph for this function:

◆ NamedTree() [3/3]

ucommon::NamedTree::NamedTree ( const NamedTree source)
protected

Construct a copy of the tree.

Parameters
sourceobject to copy from.

Definition at line 433 of file linked.cpp.

References Child, ucommon::NamedObject::Id, and Parent.

◆ ~NamedTree()

ucommon::NamedTree::~NamedTree ( )
protectedvirtual

Delete node in a tree.

If we delete a node, we must delist it from it's parent. We must also delink any child nodes. This is done by calling the purge() member.

Definition at line 451 of file linked.cpp.

References ucommon::NamedObject::Id, and purge().

Here is the call graph for this function:

Member Function Documentation

◆ find()

NamedTree * ucommon::NamedTree::find ( const char *  name) const

Find a child node of our object with the specified name.

This will also recursivily search all child nodes that have children until the named node can be found. This seeks a child node that has children.

Parameters
nameto search for.
Returns
tree object found or NULL.

Definition at line 565 of file linked.cpp.

References ucommon::OrderedIndex::begin(), Child, ucommon::eq(), and ucommon::linked_pointer< T >::next().

Referenced by ucommon::treemap< T >::find().

Here is the call graph for this function:

◆ getChild()

NamedTree * ucommon::NamedTree::getChild ( const char *  name) const

Find a direct child of our node which matches the specified name.

Parameters
nameof child node to find.
Returns
tree node object of child or NULL.

Definition at line 457 of file linked.cpp.

References ucommon::OrderedIndex::begin(), Child, ucommon::eq(), and ucommon::linked_pointer< T >::next().

Referenced by ucommon::treemap< T >::getChild(), and path().

Here is the call graph for this function:

◆ getFirst()

NamedTree * ucommon::NamedTree::getFirst ( void  ) const
inline

Get first child node in our ordered list of children.

This might be used to iterate child nodes. This may also be used to get unamed child nodes.

Returns
first child node or NULL if no children.

Definition at line 667 of file linked.h.

References ucommon::OrderedIndex::begin().

Referenced by ucommon::treemap< T >::getFirst().

Here is the call graph for this function:

◆ getIndex()

OrderedIndex * ucommon::NamedTree::getIndex ( void  ) const
inline

Get the ordered index of our child nodes.

Returns
ordered index of our children.

Definition at line 692 of file linked.h.

◆ getIndexed()

NamedTree * ucommon::NamedTree::getIndexed ( unsigned  index) const
inline

Get child by index number.

Parameters
indexof child to fetch.
Returns
indexed child node.

Definition at line 684 of file linked.h.

References ucommon::OrderedIndex::getIndexed().

Here is the call graph for this function:

◆ getLeaf()

NamedTree * ucommon::NamedTree::getLeaf ( const char *  name) const

Find a direct leaf node on our node.

A leaf node is a node that has no children of it's own. This does not perform a recursive search.

Parameters
nameof leaf child node to find.
Returns
tree node object of leaf or NULL.

Definition at line 531 of file linked.cpp.

References ucommon::OrderedIndex::begin(), Child, ucommon::eq(), and ucommon::linked_pointer< T >::next().

Referenced by ucommon::treemap< T >::getLeaf().

Here is the call graph for this function:

◆ getParent()

NamedTree * ucommon::NamedTree::getParent ( void  ) const
inline

Get parent node we are listed as a child on.

Returns
parent node or NULL if none.

Definition at line 675 of file linked.h.

◆ is_leaf()

bool ucommon::NamedTree::is_leaf ( void  ) const
inline

Test if node has children.

Returns
true if node contains child nodes.

Definition at line 729 of file linked.h.

References ucommon::OrderedIndex::begin().

Here is the call graph for this function:

◆ is_root()

bool ucommon::NamedTree::is_root ( void  ) const
inline

Test if node is root node.

Returns
true if node is root node.

Definition at line 737 of file linked.h.

◆ leaf()

NamedTree * ucommon::NamedTree::leaf ( const char *  name) const

Find a child leaf node of our object with the specified name.

This will recursively search all our child nodes until it can find a leaf node containing the specified id but that holds no further children.

Parameters
nameof leaf node to search for.
Returns
tree node object found or NULL.

Definition at line 545 of file linked.cpp.

References ucommon::OrderedIndex::begin(), Child, ucommon::eq(), and ucommon::linked_pointer< T >::next().

Referenced by ucommon::treemap< T >::leaf().

Here is the call graph for this function:

◆ operator bool()

ucommon::NamedTree::operator bool ( ) const
inline

Test if this node has a name.

Returns
true if name is set.

Definition at line 700 of file linked.h.

◆ operator!()

bool ucommon::NamedTree::operator! ( ) const
inline

Test if this node is unnamed.

Returns
false if name is set.

Definition at line 708 of file linked.h.

◆ path()

NamedTree * ucommon::NamedTree::path ( const char *  path) const

Find a subnode by a dot separated list of node names.

If one or more lead dots are used, then the search will go through parent node levels of our node. The dot separated list could be thought of as a kind of pathname where dot is used like slash. This implies that individual nodes can never use names which contain dot's if the path function will be used.

Parameters
pathname string being sought.
Returns
tree node object found at the path or NULL.

Definition at line 496 of file linked.cpp.

References getChild(), Parent, and ucommon::String::set().

Referenced by ucommon::treemap< T >::path().

Here is the call graph for this function:

◆ purge()

void ucommon::NamedTree::purge ( void  )
protected

Performs object destruction.

Note, if we delete a named tree object the name of our member object is assumed to be a dynamically allocated string that will also be free'd.

Definition at line 603 of file linked.cpp.

References ucommon::OrderedIndex::begin(), Child, ucommon::NamedObject::clearId(), ucommon::OrderedObject::delist(), ucommon::NamedObject::getNext(), and Parent.

Referenced by ~NamedTree().

Here is the call graph for this function:

◆ relist()

void ucommon::NamedTree::relist ( NamedTree trunk = NULL)
inline

Default relist is by tail...

Parameters
trunkwe add leaf node to, NULL to delist.

Definition at line 757 of file linked.h.

◆ relistHead()

void ucommon::NamedTree::relistHead ( NamedTree trunk)

Add leaf to a trunk, by reverse order.

If NULL, just remove.

Parameters
trunkwe add leaf node to.

Definition at line 484 of file linked.cpp.

References Child, ucommon::OrderedObject::delist(), ucommon::OrderedObject::enlistHead(), and Parent.

Here is the call graph for this function:

◆ relistTail()

void ucommon::NamedTree::relistTail ( NamedTree trunk)

Add leaf to a trunk, by order.

If NULL, just remove.

Parameters
trunkwe add leaf node to.

Definition at line 471 of file linked.cpp.

References Child, ucommon::OrderedObject::delist(), ucommon::OrderedObject::enlistTail(), and Parent.

Here is the call graph for this function:

◆ remove()

void ucommon::NamedTree::remove ( void  )

Remove our node from our parent list.

The name is set to NULL to keep delete from freeing the name string.

Definition at line 595 of file linked.cpp.

References Child, ucommon::OrderedObject::delist(), ucommon::NamedObject::Id, and Parent.

Here is the call graph for this function:

◆ setId()

void ucommon::NamedTree::setId ( char *  name)

Set or replace the name id of this node.

This will free the string if a name had already been set.

Parameters
namefor this node to set.

Definition at line 585 of file linked.cpp.

References ucommon::NamedObject::Id.

Member Data Documentation

◆ Child

◆ Parent

NamedTree* ucommon::NamedTree::Parent
protected

The documentation for this class was generated from the following files: