LinkedListPointer< ObjectType > Class Template Reference

Helps to manipulate singly-linked lists of objects. More...

Classes

class  Appender
 Allows efficient repeated insertions into a list. More...
 

Public Member Functions

 LinkedListPointer () noexcept
 Creates a null pointer to an empty list. More...
 
 LinkedListPointer (ObjectType *const headItem) noexcept
 Creates a pointer to a list whose head is the item provided. More...
 
LinkedListPointeroperator= (ObjectType *const newItem) noexcept
 Sets this pointer to point to a new list. More...
 
 LinkedListPointer (LinkedListPointer &&other) noexcept
 
LinkedListPointeroperator= (LinkedListPointer &&other) noexcept
 
 operator ObjectType * () const noexcept
 Returns the item which this pointer points to. More...
 
ObjectType * get () const noexcept
 Returns the item which this pointer points to. More...
 
LinkedListPointergetLast () noexcept
 Returns the last item in the list which this pointer points to. More...
 
int size () const noexcept
 Returns the number of items in the list. More...
 
LinkedListPointeroperator[] (int index) noexcept
 Returns the item at a given index in the list. More...
 
const LinkedListPointeroperator[] (int index) const noexcept
 Returns the item at a given index in the list. More...
 
bool contains (const ObjectType *const itemToLookFor) const noexcept
 Returns true if the list contains the given item. More...
 
void insertNext (ObjectType *const newItem)
 Inserts an item into the list, placing it before the item that this pointer currently points to. More...
 
void insertAtIndex (int index, ObjectType *newItem)
 Inserts an item at a numeric index in the list. More...
 
ObjectType * replaceNext (ObjectType *const newItem) noexcept
 Replaces the object that this pointer points to, appending the rest of the list to the new object, and returning the old one. More...
 
void append (ObjectType *const newItem)
 Adds an item to the end of the list. More...
 
void addCopyOfList (const LinkedListPointer &other)
 Creates copies of all the items in another list and adds them to this one. More...
 
ObjectType * removeNext () noexcept
 Removes the head item from the list. More...
 
void remove (ObjectType *const itemToRemove)
 Removes a specific item from the list. More...
 
void deleteAll ()
 Iterates the list, calling the delete operator on all of its elements and leaving this pointer empty. More...
 
LinkedListPointerfindPointerTo (ObjectType *const itemToLookFor) noexcept
 Finds a pointer to a given item. More...
 
void copyToArray (ObjectType **destArray) const noexcept
 Copies the items in the list to an array. More...
 
void swapWith (LinkedListPointer &other) noexcept
 Swaps this pointer with another one. More...
 

Detailed Description

template<class ObjectType>
class LinkedListPointer< ObjectType >

Helps to manipulate singly-linked lists of objects.

For objects that are designed to contain a pointer to the subsequent item in the list, this class contains methods to deal with the list. To use it, the ObjectType class that it points to must contain a LinkedListPointer called nextListItem, e.g.

struct MyObject
{
int x, y, z;
// A linkable object must contain a member with this name and type, which must be
// accessible by the LinkedListPointer class. (This doesn't mean it has to be public -
// you could make your class a friend of a LinkedListPointer<MyObject> instead).
};
myList.append (new MyObject());
myList.append (new MyObject());
int numItems = myList.size(); // returns 2
MyObject* lastInList = myList.getLast();

Constructor & Destructor Documentation

◆ LinkedListPointer() [1/3]

template<class ObjectType>
LinkedListPointer< ObjectType >::LinkedListPointer ( )
noexcept

Creates a null pointer to an empty list.

◆ LinkedListPointer() [2/3]

template<class ObjectType>
LinkedListPointer< ObjectType >::LinkedListPointer ( ObjectType *const  headItem)
explicitnoexcept

Creates a pointer to a list whose head is the item provided.

◆ LinkedListPointer() [3/3]

template<class ObjectType>
LinkedListPointer< ObjectType >::LinkedListPointer ( LinkedListPointer< ObjectType > &&  other)
noexcept

Member Function Documentation

◆ operator=() [1/2]

template<class ObjectType>
LinkedListPointer& LinkedListPointer< ObjectType >::operator= ( ObjectType *const  newItem)
noexcept

Sets this pointer to point to a new list.

◆ operator=() [2/2]

template<class ObjectType>
LinkedListPointer& LinkedListPointer< ObjectType >::operator= ( LinkedListPointer< ObjectType > &&  other)
noexcept

◆ operator ObjectType *()

template<class ObjectType>
LinkedListPointer< ObjectType >::operator ObjectType * ( ) const
noexcept

Returns the item which this pointer points to.

◆ get()

template<class ObjectType>
ObjectType* LinkedListPointer< ObjectType >::get ( ) const
noexcept

Returns the item which this pointer points to.

◆ getLast()

template<class ObjectType>
LinkedListPointer& LinkedListPointer< ObjectType >::getLast ( )
noexcept

Returns the last item in the list which this pointer points to.

This will iterate the list and return the last item found. Obviously the speed of this operation will be proportional to the size of the list. If the list is empty the return value will be this object. If you're planning on appending a number of items to your list, it's much more efficient to use the Appender class than to repeatedly call getLast() to find the end.

Referenced by LinkedListPointer< XmlElement >::append().

◆ size()

template<class ObjectType>
int LinkedListPointer< ObjectType >::size ( ) const
noexcept

Returns the number of items in the list.

Obviously with a simple linked list, getting the size involves iterating the list, so this can be a lengthy operation - be careful when using this method in your code.

◆ operator[]() [1/2]

template<class ObjectType>
LinkedListPointer& LinkedListPointer< ObjectType >::operator[] ( int  index)
noexcept

Returns the item at a given index in the list.

Since the only way to find an item is to iterate the list, this operation can obviously be slow, depending on its size, so you should be careful when using this in algorithms.

◆ operator[]() [2/2]

template<class ObjectType>
const LinkedListPointer& LinkedListPointer< ObjectType >::operator[] ( int  index) const
noexcept

Returns the item at a given index in the list.

Since the only way to find an item is to iterate the list, this operation can obviously be slow, depending on its size, so you should be careful when using this in algorithms.

◆ contains()

template<class ObjectType>
bool LinkedListPointer< ObjectType >::contains ( const ObjectType *const  itemToLookFor) const
noexcept

Returns true if the list contains the given item.

◆ insertNext()

template<class ObjectType>
void LinkedListPointer< ObjectType >::insertNext ( ObjectType *const  newItem)

Inserts an item into the list, placing it before the item that this pointer currently points to.

◆ insertAtIndex()

template<class ObjectType>
void LinkedListPointer< ObjectType >::insertAtIndex ( int  index,
ObjectType *  newItem 
)

Inserts an item at a numeric index in the list.

Obviously this will involve iterating the list to find the item at the given index, so be careful about the impact this may have on execution time.

◆ replaceNext()

template<class ObjectType>
ObjectType* LinkedListPointer< ObjectType >::replaceNext ( ObjectType *const  newItem)
noexcept

Replaces the object that this pointer points to, appending the rest of the list to the new object, and returning the old one.

◆ append()

template<class ObjectType>
void LinkedListPointer< ObjectType >::append ( ObjectType *const  newItem)

Adds an item to the end of the list.

This operation involves iterating the whole list, so can be slow - if you need to append a number of items to your list, it's much more efficient to use the Appender class than to repeatedly call append().

◆ addCopyOfList()

template<class ObjectType>
void LinkedListPointer< ObjectType >::addCopyOfList ( const LinkedListPointer< ObjectType > &  other)

Creates copies of all the items in another list and adds them to this one.

This will use the ObjectType's copy constructor to try to create copies of each item in the other list, and appends them to this list.

◆ removeNext()

template<class ObjectType>
ObjectType* LinkedListPointer< ObjectType >::removeNext ( )
noexcept

Removes the head item from the list.

This won't delete the object that is removed, but returns it, so the caller can delete it if necessary.

◆ remove()

template<class ObjectType>
void LinkedListPointer< ObjectType >::remove ( ObjectType *const  itemToRemove)

Removes a specific item from the list.

Note that this will not delete the item, it simply unlinks it from the list.

◆ deleteAll()

template<class ObjectType>
void LinkedListPointer< ObjectType >::deleteAll ( )

Iterates the list, calling the delete operator on all of its elements and leaving this pointer empty.

◆ findPointerTo()

template<class ObjectType>
LinkedListPointer* LinkedListPointer< ObjectType >::findPointerTo ( ObjectType *const  itemToLookFor)
noexcept

Finds a pointer to a given item.

If the item is found in the list, this returns the pointer that points to it. If the item isn't found, this returns null.

Referenced by LinkedListPointer< XmlElement >::remove().

◆ copyToArray()

template<class ObjectType>
void LinkedListPointer< ObjectType >::copyToArray ( ObjectType **  destArray) const
noexcept

Copies the items in the list to an array.

The destArray must contain enough elements to hold the entire list - no checks are made for this!

◆ swapWith()

template<class ObjectType>
void LinkedListPointer< ObjectType >::swapWith ( LinkedListPointer< ObjectType > &  other)
noexcept

Swaps this pointer with another one.


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