(cls, T)class PAbstractList: public PCollection

This class is a collection of objects which are descendents of the PObject class.

Inheritance:


Public Methods

[more]virtual Comparison Compare (const PObject & obj) const
Get the relative rank of the two lists.

Public

[more] Construction
[more] Overrides from class PContainer
[more] Overrides from class PCollection

Protected Methods

[more]PINLINE PObject& GetReferenceAt ( PINDEX index ) const
Get the object at the specified ordinal position.
[more]BOOL SetCurrent ( PINDEX index ) const
Move the internal "cursor" to the index position specified.


Inherited from PCollection:

Public

Overrides from class PObject

Common functions for collections


Inherited from PContainer:

Public

Common functions for containers

Protected Methods

ovirtual void DestroyContents()
ovirtual void AssignContents(const PContainer & c)
ovoid CopyContents(const PContainer & c)
ovoid CloneContents(const PContainer * src)
ovoid Destruct()


Inherited from PObject:

Public

Run Time Type functions

Comparison functions

I/O functions

Miscellaneous functions


Documentation

This class is a collection of objects which are descendents of the PObject class. It is implemeted as a doubly linked list.

The implementation of a list allows very fast inserting and deleting of objects in the collection, but has severe penalties for random access. All object access should be done sequentially to avoid these speed penalties.

The class remembers the last accessed element. This state information is used to optimise access by the "virtual array" model of collections. If access via ordinal index is made sequentially there is little overhead.

The PAbstractList class would very rarely be descended from directly by the user. The PDECLARE_LIST and PLIST macros would normally be used to create descendent classes. They will instantiate the template based on PList or directly declare and define the class (using inline functions) if templates are not being used.

The PList class or PDECLARE_LIST macro will define the correctly typed operators for subscript access (operator[]).

o Construction

oPINLINE PAbstractList()
Create a new, empty, list.

Note that by default, objects placed into the list will be deleted when removed or when all references to the list are destroyed.

ovirtual Comparison Compare(const PObject & obj) const
Get the relative rank of the two lists. The following algorithm is employed for the comparison:
EqualTo
if the two lists are identical in length and each objects values, not pointer, are equal.

LessThan
if the instances object value at an ordinal position is less than the corresponding objects value in the obj parameters list.

This is also returned if all objects are equal and the instances list length is less than the obj parameters list length.

GreaterThan
if the instances object value at an ordinal position is greater than the corresponding objects value in the obj parameters list.

This is also returned if all objects are equal and the instances list length is greater than the obj parameters list length.

Returns:
comparison of the two objects, EqualTo for same, LessThan for obj logically less than the object and GreaterThan for obj logically greater than the object.

o Overrides from class PContainer

ovirtual BOOL SetSize( PINDEX newSize )
This function is meaningless for lists. The size of the collection is determined by the addition and removal of objects. The size cannot be set in any other way.

Returns:
Always TRUE.
Parameters:
newSize - New size for the list, this is ignored.

o Overrides from class PCollection

ovirtual PINDEX Append( PObject * obj )
Append a new object to the collection. This places a new link at the "tail" of the list.

Returns:
index of the newly added object.
Parameters:
obj - New object to place into the collection.

ovirtual PINDEX Insert( const PObject & before, PObject * obj )
Insert a new object immediately before the specified object. If the object to insert before is not in the collection then the equivalent of the Append() function is performed.

Note that the object values are compared for the search of the before parameter, not the pointers. So the objects in the collection must correctly implement the PObject::Compare() function.

Returns:
index of the newly inserted object.
Parameters:
before - Object value to insert before.
obj - New object to place into the collection.

ovirtual PINDEX InsertAt( PINDEX index, PObject * obj )
Insert a new object at the specified ordinal index. If the index is greater than the number of objects in the collection then the equivalent of the Append() function is performed.

Returns:
index of the newly inserted object.
Parameters:
index - Index position in collection to place the object.
obj - New object to place into the collection.

ovirtual BOOL Remove( const PObject * obj )
Remove the object from the collection. If the AllowDeleteObjects option is set then the object is also deleted.

Returns:
TRUE if the object was in the collection.
Parameters:
obj - Existing object to remove from the collection.

ovirtual PObject* RemoveAt( PINDEX index )
Remove the object at the specified ordinal index from the collection. If the AllowDeleteObjects option is set then the object is also deleted.

Note if the index is beyond the size of the collection then the function will assert.

Returns:
pointer to the object being removed, or NULL if it was deleted.
Parameters:
index - Index position in collection to place the object.

ovirtual BOOL SetAt( PINDEX index, PObject * val )
Set the object at the specified ordinal position to the new value. This will overwrite the existing entry. If the AllowDeleteObjects option is set then the old object is also deleted.

The object accessed in this way is remembered by the class and further access will be fast. Access to elements one either side of that saved element, and the head and tail of the list, will always be fast.

Note if the index is beyond the size of the collection then the function will assert.

Returns:
TRUE if the object was successfully added.
Parameters:
index - Index position in collection to set.
val - New value to place into the collection.

ovirtual PObject* GetAt( PINDEX index ) const
Get the object at the specified ordinal position. If the index was greater than the size of the collection then NULL is returned.

The object accessed in this way is remembered by the class and further access will be fast. Access to elements one either side of that saved element, and the head and tail of the list, will always be fast.

Returns:
pointer to object at the specified index.

ovirtual PINDEX GetObjectsIndex( const PObject * obj ) const
Search the collection for the specific instance of the object. The object pointers are compared, not the values. A simple linear search from "head" of the list is performed.

Returns:
ordinal index position of the object, or P_MAX_INDEX.
Parameters:
obj - Object to find.

ovirtual PINDEX GetValuesIndex( const PObject & obj ) const
Search the collection for the specified value of the object. The object values are compared, not the pointers. So the objects in the collection must correctly implement the PObject::Compare() function. A simple linear search from "head" of the list is performed.

Returns:
ordinal index position of the object, or P_MAX_INDEX.
Parameters:
obj - Object to find value of.

oPINLINE PObject& GetReferenceAt( PINDEX index ) const
Get the object at the specified ordinal position. If the index was greater than the size of the collection then this asserts.

The object accessed in this way is remembered by the class and further access will be fast. Access to elements one either side of that saved element, and the head and tail of the list, will always be fast.

Returns:
reference to object at the specified index.
Parameters:
index - Ordinal index of the list element to set as current.

oBOOL SetCurrent( PINDEX index ) const
Move the internal "cursor" to the index position specified. This function will optimise the sequential move taking into account the previous current position and the position at the head and tail of the list. Whichever of these three points is closes is used as the starting point for a sequential move to the required index.

Returns:
TRUE if the index could be set as the current element.
Parameters:
index - Ordinal index of the list element to set as current.


Direct child classes:
PStack
PQueue
PList

Alphabetic index HTML hierarchy of classes or Java



This page was generated with the help of DOC++.