SCL  1.0
Standard Control Library : Control, dynamics, physics, and simulation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Macros Groups Pages
Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
sutil::CMappedList< Idx, T > Class Template Reference

#include <CMappedList.hpp>

Inheritance diagram for sutil::CMappedList< Idx, T >:
Inheritance graph
[legend]
Collaboration diagram for sutil::CMappedList< Idx, T >:
Collaboration graph
[legend]

Classes

class  const_iterator
 
class  iterator
 

Public Types

typedef size_t size_type
 
typedef ptrdiff_t difference_type
 
typedef T * pointer
 
typedef const T * const_pointer
 
typedef T & reference
 
typedef const T & const_reference
 
typedef T value_type
 

Public Member Functions

 CMappedList ()
 
 CMappedList (const CMappedList< Idx, T > &arg_pm)
 
virtual CMappedList< Idx, T > & operator= (const CMappedList< Idx, T > &arg_rhs)
 
virtual ~CMappedList ()
 
bool operator== (const CMappedList< Idx, T > &rhs)
 
bool operator!= (const CMappedList< Idx, T > &rhs)
 
void swap (CMappedList< Idx, T > &arg_swap_obj)
 
virtual T * create (const Idx &arg_idx, const bool insert_at_start=true)
 
virtual T * create (const Idx &arg_idx, const T &arg_t, const bool insert_at_start=true)
 
virtual T * insert (const Idx &arg_idx, T *arg_t, const bool insert_at_start=true)
 
virtual T * at (const std::size_t arg_idx)
 
virtual T * at (const Idx &arg_idx)
 
virtual const Idx * getIndexAt (const std::size_t arg_idx) const
 
virtual int getIndexNumericAt (const Idx &arg_idx) const
 
virtual int getIndexNumericAt (const T *const arg_node) const
 
virtual const T * at_const (const std::size_t arg_idx) const
 
virtual const T * at_const (const Idx &arg_idx) const
 
virtual bool erase (T *arg_t)
 
virtual bool erase (const Idx &arg_idx)
 
virtual std::size_t size () const
 
virtual bool empty () const
 
virtual bool clear ()
 
virtual T * operator[] (const std::size_t arg_idx)
 
iterator begin ()
 
const_iterator begin () const
 
iterator end ()
 
const_iterator end () const
 
virtual bool sort (const std::vector< Idx > &arg_order)
 
virtual bool sort_get_order (std::vector< Idx > &ret_order) const
 
virtual bool isSorted () const
 

Protected Member Functions

virtual bool deepCopy (const CMappedList< Idx, T > *const arg_pmap)
 

Protected Attributes

SMLNode< Idx, T > * front_
 
SMLNode< Idx, T > * back_
 
SMLNode< Idx, T > null_
 
std::map< Idx, SMLNode< Idx, T > * > map_
 
std::size_t size_
 
std::vector< Idx > sorting_order_
 
bool flag_is_sorted_
 

Detailed Description

template<typename Idx, typename T>
class sutil::CMappedList< Idx, T >

A linked list to allocate memory for objects and store them, allowing pointer access.

Also grants std::map-based access to members, indexed on some type.

Main use : Manage a single data store for memory that many must access.

When to use: (a) You want to store pointers to the contained objects and guarantee that the pointed-to memory doesn't change (Eg. Adding an element to a vector or a map might invalidate the contained objects's addresses) (b) You usage is. Access a contained object once, and then perform lots of operations on it. (c) You don't want to manage either map access or memory for contained objects (d) You want the leanest possible code that does the above

Member Typedef Documentation

template<typename Idx, typename T>
typedef size_t sutil::CMappedList< Idx, T >::size_type

STL container specific code: (a) A set of typedefs (b) An iterator definition (c) Standard methods



The standard stl typedefs:


Constructor & Destructor Documentation

template<typename Idx, typename T>
sutil::CMappedList< Idx, T >::CMappedList ( )
inline

The standard methods


Constructor : Resets the pilemap.

template<typename Idx, typename T>
sutil::CMappedList< Idx, T >::CMappedList ( const CMappedList< Idx, T > &  arg_pm)
inlineexplicit

Copy Constructor : Performs a deep-copy (std container requirement). Beware; This can be quite slow. 'explicit' makes sure that only a CMappedList can be copied. Ie. Implicit copy-constructor use is disallowed.

template<typename Idx , typename T >
sutil::CMappedList< Idx, T >::~CMappedList ( )
virtual

Destructor : Deallocates all the nodes if someone already hasn't done so.

Member Function Documentation

template<typename Idx , typename T >
T * sutil::CMappedList< Idx, T >::at ( const std::size_t  arg_idx)
virtual

Returns the element at the given numerical index in the linked list (usually useful only for debugging)

NOTE : The index starts at 0

template<typename Idx, typename T >
T * sutil::CMappedList< Idx, T >::at ( const Idx &  arg_idx)
virtual

Returns the element referenced by the index

NOTE : This uses the std::map (and is somewhat slow)

template<typename Idx , typename T >
const T * sutil::CMappedList< Idx, T >::at_const ( const std::size_t  arg_idx) const
virtual

Returns the element at the given numerical index in the linked list (usually useful only for debugging)

NOTE : The index starts at 0

template<typename Idx, typename T >
const T * sutil::CMappedList< Idx, T >::at_const ( const Idx &  arg_idx) const
virtual

Returns a const pointer to the element referenced by the index

NOTE : This uses the std::map (and is rather slow)

template<typename Idx, typename T>
iterator sutil::CMappedList< Idx, T >::begin ( )
inline

The iterator functions


template<typename Idx , typename T >
bool sutil::CMappedList< Idx, T >::clear ( )
virtual
template<typename Idx, typename T >
T * sutil::CMappedList< Idx, T >::create ( const Idx &  arg_idx,
const bool  insert_at_start = true 
)
virtual

Example usage: first.assign (7,100); // 7 ints with value 100 second.assign (first.begin(),first.end()); // a copy of first ******************************* The mapped list specific methods


Creates an element, inserts an element into the list and returns the pointer

Reimplemented in sutil::CMappedTree< TIdx, TNode >, sutil::CMappedTree< std::string, scl::SRigidBodyDyn >, sutil::CMappedTree< std::string, scl::SRigidBody >, and sutil::CMappedTree< std::string, scl::SGraphicsChaiRigidBody >.

template<typename Idx, typename T>
T * sutil::CMappedList< Idx, T >::create ( const Idx &  arg_idx,
const T &  arg_t,
const bool  insert_at_start = true 
)
virtual

Copies the given element, inserts the copied element into the list and returns the pointer to the copied element.

By default inserts element at the start/begin() position. If specified, flag is false, inserts at the end of the list.

If size is zero, insert at start/end doesn't matter.

Reimplemented in sutil::CMappedTree< TIdx, TNode >, sutil::CMappedTree< std::string, scl::SRigidBodyDyn >, sutil::CMappedTree< std::string, scl::SRigidBody >, and sutil::CMappedTree< std::string, scl::SGraphicsChaiRigidBody >.

template<typename Idx, typename T>
bool sutil::CMappedList< Idx, T >::deepCopy ( const CMappedList< Idx, T > *const  arg_pmap)
protectedvirtual

Does a deep copy of the mappedlist to get a new one. This is VERY SLOW.

Set the current mappedlist to the new mappedlist

template<typename Idx, typename T>
virtual bool sutil::CMappedList< Idx, T >::empty ( ) const
inlinevirtual

Is the container empty

template<typename Idx , typename T>
bool sutil::CMappedList< Idx, T >::erase ( T *  arg_t)
virtual
template<typename Idx, typename T>
bool sutil::CMappedList< Idx, T >::erase ( const Idx &  arg_idx)
virtual

Erases an element from the list. Referenced by its std::map index

NOTE : This uses the std::map (and is rather slow)

Reimplemented in sutil::CMappedMultiLevelList< Idx, T >, sutil::CMappedMultiLevelList< std::string, scl::STaskBase * >, and sutil::CMappedMultiLevelList< std::string, scl::CTaskBase * >.

template<typename Idx , typename T >
const Idx * sutil::CMappedList< Idx, T >::getIndexAt ( const std::size_t  arg_idx) const
virtual

Returns the typed index at the given numerical index in the linked list

NOTE : The index starts at 0

template<typename Idx, typename T >
int sutil::CMappedList< Idx, T >::getIndexNumericAt ( const Idx &  arg_idx) const
virtual

Returns the numeric index at the given typed index in the linked list

NOTE : The index starts at 0. Returns -1 if node not found.

Returns the numeric index at the given typed index in the linked list

template<typename Idx, typename T>
int sutil::CMappedList< Idx, T >::getIndexNumericAt ( const T *const  arg_node) const
virtual

Returns the numeric index at the given typed index in the linked list

NOTE : The index starts at 0. Returns -1 if node not found.

Returns the numeric index at the given typed index in the linked list

template<typename Idx, typename T>
T * sutil::CMappedList< Idx, T >::insert ( const Idx &  arg_idx,
T *  arg_t,
const bool  insert_at_start = true 
)
virtual

Inserts the given object into the list and returns the pointer to the copied element. NOTE : The recommended method is to use create. Else the object memory deallocation might be ambiguous. Remember that the mapped list "always" clears its own data.

By default inserts element at the start/begin() position. If specified, flag is false, inserts at the end of the list.

If size is zero, insert at start/end doesn't matter.

Reimplemented in sutil::CMappedTree< TIdx, TNode >, sutil::CMappedTree< std::string, scl::SRigidBodyDyn >, sutil::CMappedTree< std::string, scl::SRigidBody >, and sutil::CMappedTree< std::string, scl::SGraphicsChaiRigidBody >.

template<typename Idx, typename T>
virtual bool sutil::CMappedList< Idx, T >::isSorted ( ) const
inlinevirtual

Whether the list has been sorted or not

template<typename Idx, typename T>
bool sutil::CMappedList< Idx, T >::operator!= ( const CMappedList< Idx, T > &  rhs)

Comparison operator : Performs an element-by-element check (std container requirement). Beware; This can be quite slow.

template<typename Idx, typename T>
virtual CMappedList<Idx,T>& sutil::CMappedList< Idx, T >::operator= ( const CMappedList< Idx, T > &  arg_rhs)
inlinevirtual

Assignment operator : Performs a deep-copy (std container requirement). Beware; This can be quite slow.

template<typename Idx, typename T>
bool sutil::CMappedList< Idx, T >::operator== ( const CMappedList< Idx, T > &  rhs)

Comparison operator : Performs an element-by-element check (std container requirement). Beware; This can be quite slow.

template<typename Idx, typename T>
virtual T* sutil::CMappedList< Idx, T >::operator[] ( const std::size_t  arg_idx)
inlinevirtual

Typical operator access

template<typename Idx, typename T>
virtual std::size_t sutil::CMappedList< Idx, T >::size ( ) const
inlinevirtual

Returns the size of the mapped list

template<typename Idx, typename T >
bool sutil::CMappedList< Idx, T >::sort ( const std::vector< Idx > &  arg_order)
virtual

Sorting related functions


Sorts the list so that iterator access matches the given vector's index. Ie. Given indices 0 to n in the vector, the begin() iterator will match 0, and the end() will appear after iterating over n.

Any create/erase/swap etc. function call will invalidate the sort ordering.

Sorting type : Insertion Sort.

template<typename Idx, typename T>
virtual bool sutil::CMappedList< Idx, T >::sort_get_order ( std::vector< Idx > &  ret_order) const
inlinevirtual

Get the sorting order if there is one

template<typename Idx, typename T>
void sutil::CMappedList< Idx, T >::swap ( CMappedList< Idx, T > &  arg_swap_obj)

Swaps the elements with the passed pilemap

Member Data Documentation

template<typename Idx, typename T>
SMLNode<Idx,T>* sutil::CMappedList< Idx, T >::back_
protected

Pointer to the tail/back/dangling-end of the list

template<typename Idx, typename T>
bool sutil::CMappedList< Idx, T >::flag_is_sorted_
protected

Whether the list is sorted or not

template<typename Idx, typename T>
SMLNode<Idx,T>* sutil::CMappedList< Idx, T >::front_
protected

Mapped List Data


Pointer to the head/front/insertion-end of the list

template<typename Idx, typename T>
std::map<Idx, SMLNode<Idx,T>*> sutil::CMappedList< Idx, T >::map_
protected

The map that will enable Idx based data lookup

template<typename Idx, typename T>
SMLNode<Idx,T> sutil::CMappedList< Idx, T >::null_
protected

Pointer to the element obtained with the end() call. Does not exist in the map.

template<typename Idx, typename T>
std::size_t sutil::CMappedList< Idx, T >::size_
protected

The size of the MappedList

template<typename Idx, typename T>
std::vector<Idx> sutil::CMappedList< Idx, T >::sorting_order_
protected

An index that specifies a sort ordering if required


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