libcsdbg  1.28
C++ exception (and generic) stack trace debug library
csdbg::chain< T > Class Template Reference

Lightweight, templated, doubly-linked list (using XOR linking) More...

#include <chain.hpp>

+ Inheritance diagram for csdbg::chain< T >:
+ Collaboration diagram for csdbg::chain< T >:

Public Member Functions

 chain ()
 Object default constructor. More...
 
 chain (const chain &)
 Object copy constructor. More...
 
virtual ~chain ()
 Object destructor. More...
 
virtual chainclone () const
 Object virtual copy constructor. More...
 
virtual u32 size () const
 Get the chain size (node count) More...
 
virtual chainoperator= (const chain &)
 Assignment operator. More...
 
virtual T * operator[] (u32) const
 Subscript operator. More...
 
virtual chainadd (T *)
 Add a node to the chain. More...
 
virtual chainremove (u32)
 Dispose the node (and its data) at a chain offset. More...
 
virtual chainclear ()
 Empty the chain. More...
 
virtual T * at (u32) const
 Get the node data pointer at a chain offset. More...
 
virtual T * detach (u32)
 Detach the node at a chain offset. More...
 
virtual chainforeach (void(*)(u32, T *)) const
 Traverse the chain with a callback for each node. More...
 
- Public Member Functions inherited from csdbg::object
virtual ~object ()=0
 To be implemented. More...
 
virtual const i8class_name () const
 Query the class name of an object descending from csdbg::object. More...
 

Protected Member Functions

virtual node< T > * node_at (u32) const
 Get the node at a chain offset. More...
 
virtual node< T > * node_with (const T *) const
 Get the node with m_data == d. More...
 
virtual node< T > * detach_node (u32)
 Detach the node at a chain offset. More...
 

Protected Attributes

node< T > * m_head
 Chain head. More...
 
node< T > * m_tail
 Chain tail. More...
 
u32 m_size
 Node count. More...
 

Detailed Description

template<class T>
class csdbg::chain< T >

Lightweight, templated, doubly-linked list (using XOR linking)

A doubly-linked list is a great optimization compared with a singly-linked one in node access times and memory references, especially in very big lists. The XOR linking implementation, although a bit more complex, uses the same ammount of memory (per node) as a singly-linked list. The chain supports shared data (multiple chains can point to the same data) but it's not thread safe, callers should synchronize thread access. This implementation does not allow a node with a NULL or a duplicate data pointer. A node can be detached (dispose the node without deleting its data) or removed (dispose both node and data). A chain can be traversed using simple callbacks and method chain::foreach

See Also
csdbg::node
Todo:
Implement cached pointers

Definition at line 33 of file chain.hpp.


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