libUTL++
|
A collection of objects. More...
#include <Collection.h>
Public Member Functions | |
void | assertOwner () |
Assert ownership of contained objects. More... | |
virtual void | copy (const Object &rhs) |
Copy another instance. More... | |
virtual void | steal (Object &rhs) |
"Steal" the internal representation from another instance. More... | |
virtual void | vclone (const Object &rhs) |
Make an exact copy of another instance. More... | |
virtual void | dump (Stream &os, uint_t level=uint_t_max) const |
Dump a human-readable representation of self to the given output stream. More... | |
virtual void | serialize (Stream &stream, uint_t io, uint_t mode=ser_default) |
Serialize to or from a stream. More... | |
void | serialize (const RunTimeClass *rtc, Stream &stream, uint_t io, uint_t mode=ser_default) |
Serialize to/from the given stream. More... | |
virtual size_t | innerAllocatedSize () const |
Get the "inner" allocated size. More... | |
virtual bool | update (const Object *object) |
Update the given object. More... | |
Accessors | |
bool | isOwner () const |
Get the owner flag. More... | |
void | setOwner (bool owner) |
Set the owner flag. More... | |
const Ordering * | ordering () const |
Get the ordering. More... | |
Ordering * | ordering () |
Get the ordering. More... | |
void | setOrdering (const Ordering &ordering, uint_t algorithm=sort_quickSort) |
Set the ordering, and optionally sort the collection to reflect the new ordering. More... | |
virtual void | setOrdering (Ordering *ordering, uint_t algorithm=sort_quickSort) |
Set the ordering, and optionally sort the collection to reflect the new ordering. More... | |
bool | empty () const |
Determine whether the collection is empty. More... | |
bool | isMultiSet () const |
Get the multiSet flag. More... | |
void | setMultiSet (bool multiSet) |
Set the multiSet flag. More... | |
bool | isMarked () const |
Get marked flag. More... | |
void | setMarked (bool marked=true) |
Set marked flag. More... | |
size_t | items () const |
Get the number of contained objects. More... | |
size_t | size () const |
Get the number of contained objects. More... | |
Adding Objects | |
bool | add (const Object &object) |
Add an object to the collection. More... | |
virtual bool | add (const Object *object)=0 |
Add an object to the collection. More... | |
void | add (const Collection &collection) |
Add another collection's objects. More... | |
virtual BidIt * | addIt (const Object *object) |
Add an object to the collection. More... | |
Object * | addOrFind (const Object &object) |
Add the given object, or find a matching object already contained. More... | |
virtual Object * | addOrFind (const Object *object) |
Add the given object, or find a matching object already contained. More... | |
bool | addOrUpdate (const Object &object) |
Add or update the given object. More... | |
virtual bool | addOrUpdate (const Object *object) |
Add or update the given object. More... | |
Collection & | copyItems (const Collection *src, const Predicate *pred=nullptr, bool predVal=true) |
Copy objects from another collection. More... | |
Collection & | copyItems (const ListNode *src, const Predicate *pred=nullptr, bool predVal=true) |
Copy objects from a double-linked list. More... | |
Collection & | copyItems (const SlistNode *src, const Predicate *pred=nullptr, bool predVal=true) |
Copy objects from a single-linked list. More... | |
Collection & | stealItems (Collection *src) |
"Steal" items from another collection. More... | |
Collection & | operator+= (const Object &rhs) |
Add an object to the collection. More... | |
Collection & | operator+= (const Object *rhs) |
Add an object to the collection. More... | |
Collection & | operator+= (const Collection &rhs) |
Add another collection's objects. More... | |
Collection & | operator-= (const Object &rhs) |
Remove an object from the collection. More... | |
Human-Readable Representation | |
void | dump (Stream &os, uint_t level, bool key, bool printClassName, uint_t indent, const char *separator) const |
Dump contained objects to a stream. More... | |
virtual String | toString () const |
Obtain a string representation by invoking Object::toString() on all contained objects. | |
String | toString (bool key) const |
Obtain a string representation by invoking Object::toString() on all contained objects (or their keys). More... | |
String | toString (const char *sep, bool key=false) const |
Obtain a string represenation by invoking Object::toString() on all contained objects (or their keys). More... | |
String | toString (const String &sep, bool key=false) const |
Obtain a string represenation of the collection by invoking Object::toString() on all contained objects (or their keys). More... | |
Iterators | |
iterator | begin () const |
Return a const iterator pointing to the first object in the collection. More... | |
iterator | begin () |
Return an iterator pointing to the first object in the collection. More... | |
virtual BidIt * | beginNew () const =0 |
Return a const iterator pointing to the beginning of the collection. More... | |
virtual BidIt * | beginNew ()=0 |
Return an iterator pointing to the beginning of the collection. More... | |
virtual BidIt * | createIt () const |
Create a const iterator. More... | |
virtual BidIt * | createIt () |
Create an iterator. More... | |
iterator | end () const |
Return a const iterator pointing to the end of the collection. More... | |
iterator | end () |
Return an iterator pointing to the end of the collection. More... | |
virtual BidIt * | endNew () const =0 |
Return a const iterator pointing to the end of the collection. More... | |
virtual BidIt * | endNew ()=0 |
Return an iterator pointing to the end of the collection. More... | |
Querying and Searching | |
bool | contains (const Object *key) const |
Determine whether the collection contains an object matching the given key. More... | |
bool | contains (const Object &key) const |
Determine whether the collection contains an object matching the given key. More... | |
size_t | count (const Predicate *pred=nullptr, bool predVal=true) const |
Count contained objects. More... | |
Object * | find (const Object *key) const |
Find an object matching a given key. More... | |
virtual Object * | find (const Object &key) const |
Find an object matching a given key. More... | |
void | findIt (const Object &key, BidIt &it) const |
Find an object matching a given key. More... | |
virtual void | findIt (const Object &key, BidIt &it) |
Find an object matching a given key. More... | |
Object * | first () const |
Return the first object (nullptr if empty). More... | |
bool | has (const Object *key) const |
See contains(). More... | |
bool | has (const Object &key) const |
See contains(). More... | |
Object * | last () const |
Get the last object (nullptr if empty). More... | |
Removing Objects | |
virtual void | clear ()=0 |
Clear the collection by removing all objects. More... | |
bool | remove (const Object *key) |
Remove the object matching the given key. More... | |
virtual bool | remove (const Object &key) |
Remove the object matching the given key. More... | |
virtual void | removeIt (BidIt &it) |
Remove the object the given iterator points to. More... | |
Object * | take (BidIt &it) |
Remove the object the given iterator points to, but do not delete the object even if the collection owns its objects. More... | |
Operators | |
Object * | operator[] (const Object *object) |
add-or-find access operator (returns Object*). More... | |
Object & | operator() (const Object *object) |
add-or-find access operator (returns Object&). More... | |
Public Member Functions inherited from utl::Object | |
void | clear () |
Revert to initial state. More... | |
virtual int | compare (const Object &rhs) const |
Compare with another object. More... | |
void | dumpWithClassName (Stream &os, uint_t indent=4, uint_t level=uint_t_max) const |
Front-end for dump() that prints the object's class name. More... | |
virtual const Object & | getKey () const |
Get the key for this object. More... | |
bool | hasKey () const |
Determine whether or not the object has a key. More... | |
virtual const Object & | getProxiedObject () const |
Get the proxied object (= self if none). More... | |
virtual Object & | getProxiedObject () |
Get the proxied object (= self if none). More... | |
virtual size_t | hash (size_t size) const |
Get the hash code for the object. More... | |
bool | _isA (const RunTimeClass *runTimeClass) const |
Determine whether self's class is a descendent of the given class. More... | |
operator String () const | |
Conversion to String. More... | |
size_t | allocatedSize () const |
Get the total allocated size of this object. More... | |
virtual void | addOwnedIt (const class FwdIt *it) const |
Notify self that it owns the given iterator. More... | |
virtual void | removeOwnedIt (const class FwdIt *it) const |
Notify self that the given owned iterator has been destroyed. More... | |
bool | operator< (const Object &rhs) const |
Less-than operator. More... | |
bool | operator<= (const Object &rhs) const |
Less-than-or-equal-to operator. More... | |
bool | operator> (const Object &rhs) const |
Greater-than operator. More... | |
bool | operator>= (const Object &rhs) const |
Greater-than-or-equal-to operator. More... | |
bool | operator== (const Object &rhs) const |
Equal-to operator. More... | |
bool | operator!= (const Object &rhs) const |
Unequal-to operator. More... | |
void | serializeIn (Stream &is, uint_t mode=ser_default) |
Serialize from an input stream. More... | |
void | serializeOut (Stream &os, uint_t mode=ser_default) const |
Serialize to an output stream. More... | |
void | serializeOutBoxed (Stream &os, uint_t mode=ser_default) const |
Serialize a boxed object to an output stream. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from utl::Object | |
static Object * | serializeInNullable (Stream &is, uint_t mode=ser_default) |
Serialize a nullptr-able object from an input stream. More... | |
static void | serializeOutNullable (const Object *object, Stream &os, uint_t mode=ser_default) |
Serialize a nullptr-able object to an output stream. More... | |
static void | serializeNullable (Object *&object, Stream &stream, uint_t io, uint_t mode=ser_default) |
Serialize a nullptr-able object to or from a stream. More... | |
static Object * | serializeInBoxed (Stream &is, uint_t mode=ser_default) |
Serialize a boxed object from an input stream. More... | |
static void | serializeBoxed (Object *&object, Stream &stream, uint_t io, uint_t mode=ser_default) |
Serialize a boxed object to or from a stream. More... | |
Protected Member Functions inherited from utl::FlagsMI | |
FlagsMI () | |
Constructor. More... | |
virtual | ~FlagsMI () |
Destructor. More... | |
void | copyFlags (const FlagsMI &rhs) |
Copy the given flags. More... | |
void | copyFlags (const FlagsMI &rhs, uint_t lsb, uint_t msb) |
Copy (some of) the given flags. More... | |
void | copyFlags (uint64_t flags, uint_t lsb, uint_t msb) |
Copy (some of) the given flags. More... | |
bool | getFlag (uint_t flagNum) const |
Get a user-defined flag. More... | |
void | setFlag (uint_t flagNum, bool val) |
Set a user-defined flag. More... | |
uint64_t | getFlagsNumber (uint64_t mask, uint64_t shift=0) |
Get a multi-bit value in the flags data (which is stored as one 64-bit integer). More... | |
void | setFlagsNumber (uint64_t mask, uint64_t shift, uint64_t num) |
Set a multi-bit value in the flags data (which is stored as one 64-bit integer). More... | |
uint64_t | getFlags () const |
Get the flags. More... | |
void | setFlags (uint64_t flags) |
Set the flags. More... | |
A collection of objects.
Collection is an abstraction for container classes. As such, it provides a standard interface for functionality that is useful for all kinds of collection classes:
Attributes
Definition at line 62 of file Collection.h.
void utl::Collection::assertOwner | ( | ) |
Assert ownership of contained objects.
Make copies of all contained objects, and set the owner flag to true.
|
virtual |
Copy another instance.
When you override copy(), you should usually call the superclass's copy().
rhs | object to copy |
Reimplemented from utl::Object.
Reimplemented in utl::Array, and utl::SpanAllocator< T, D >.
|
virtual |
"Steal" the internal representation from another instance.
The default implementation just calls vclone(), so you have to override this if you want a "move" capability.
Reimplemented from utl::Object.
Reimplemented in utl::Array, utl::Hashtable, utl::List, utl::Heap, utl::SkipList, utl::RBtree, utl::BinTree, and utl::Deque.
|
virtual |
Make an exact copy of another instance.
The default implementation just calls copy(), so you have to override this if you want different behavior for copy construction and cloning.
Reimplemented from utl::Object.
Reimplemented in utl::Hashtable.
|
virtual |
Dump a human-readable representation of self to the given output stream.
A common use of this is for debugging & testing.
os | stream to dump to |
level | level of 'verbosity' for the dump |
Reimplemented from utl::Object.
Reimplemented in utl::SpanAllocator< T, D >.
|
inlinevirtual |
Serialize to or from a stream.
This is the only virtual method for serialization. You must override this in any class that has data to be serialized, and ensure that the superclass's serialize() gets called.
stream | stream to serialize from/to |
io | see utl::io_t |
mode | see utl::serialize_t |
Reimplemented from utl::Object.
Reimplemented in utl::SpanAllocator< T, D >.
Definition at line 87 of file Collection.h.
References utl::ser_default, and utl::serialize().
void utl::Collection::serialize | ( | const RunTimeClass * | rtc, |
Stream & | stream, | ||
uint_t | io, | ||
uint_t | mode = ser_default |
||
) |
Serialize to/from the given stream.
If a RunTimeClass is given, it is assumed that all objects in the collection are of that same type.
|
virtual |
Get the "inner" allocated size.
Reimplemented from utl::Object.
Reimplemented in utl::Array, utl::Hashtable, utl::List, utl::Heap, utl::SkipList, utl::RBtree, and utl::Deque.
|
virtual |
Update the given object.
object | object to be updated |
|
inline |
Get the owner flag.
Definition at line 113 of file Collection.h.
|
inline |
Set the owner flag.
Definition at line 120 of file Collection.h.
|
inline |
Get the ordering.
Definition at line 127 of file Collection.h.
|
inline |
Get the ordering.
Definition at line 134 of file Collection.h.
|
inline |
Set the ordering, and optionally sort the collection to reflect the new ordering.
ordering | new ordering (make a copy) |
algorithm | (optional : sort_quickSort) sort algorithm |
Definition at line 145 of file Collection.h.
References utl::sort_quickSort.
|
virtual |
Set the ordering, and optionally sort the collection to reflect the new ordering.
ordering | new ordering |
algorithm | (optional : sort_quickSort) sort algorithm |
Reimplemented in utl::List, and utl::SortedCollection.
|
inline |
Determine whether the collection is empty.
Definition at line 159 of file Collection.h.
|
inline |
Get the multiSet flag.
Definition at line 166 of file Collection.h.
|
inline |
Set the multiSet flag.
Definition at line 173 of file Collection.h.
|
inline |
Get marked flag.
Definition at line 180 of file Collection.h.
|
inline |
Set marked flag.
Definition at line 187 of file Collection.h.
|
inline |
Get the number of contained objects.
Definition at line 194 of file Collection.h.
|
inline |
Get the number of contained objects.
Definition at line 201 of file Collection.h.
|
inline |
Add an object to the collection.
If isOwner(), a copy of the object will be made.
object | object to add |
Definition at line 215 of file Collection.h.
References utl::clone().
|
pure virtual |
Add an object to the collection.
object | object to add |
Implemented in utl::Array, utl::List, utl::Hashtable, utl::BinTree, utl::ObjectCache, utl::SkipList, utl::Heap, utl::Deque, and utl::SpanCol< T, D >.
|
inline |
Add another collection's objects.
If isOwner(), copies will be made of all objects added.
collection | collection to copy objects from |
Definition at line 235 of file Collection.h.
Add an object to the collection.
object | object to add |
Add the given object, or find a matching object already contained.
Definition at line 252 of file Collection.h.
References utl::clone().
Add the given object, or find a matching object already contained.
Reimplemented in utl::Hashtable, and utl::SortedCollection.
|
inline |
Add or update the given object.
If the object already exists, it will be updated, otherwise it will be added. If isOwner(), a copy of the object will be made.
object | object to add or update |
Definition at line 271 of file Collection.h.
References utl::clone().
|
virtual |
Add or update the given object.
If the object already exists, it will be updated, otherwise it will be added.
object | object to add or update |
Reimplemented in utl::Hashtable, and utl::SortedCollection.
Collection& utl::Collection::copyItems | ( | const Collection * | src, |
const Predicate * | pred = nullptr , |
||
bool | predVal = true |
||
) |
Copy objects from another collection.
src | source collection |
pred | (optional) predicate : require (pred(object) == predVal) |
predVal | (optional : true) predicate value |
Collection& utl::Collection::copyItems | ( | const ListNode * | src, |
const Predicate * | pred = nullptr , |
||
bool | predVal = true |
||
) |
Copy objects from a double-linked list.
src | head of source list |
pred | (optional) predicate : require (pred(object) == predVal) |
predVal | (optional : true) predicate value |
Collection& utl::Collection::copyItems | ( | const SlistNode * | src, |
const Predicate * | pred = nullptr , |
||
bool | predVal = true |
||
) |
Copy objects from a single-linked list.
src | head of source list |
pred | (optional) predicate : require (pred(object) == predVal) |
predVal | (optional : true) predicate value |
Collection& utl::Collection::stealItems | ( | Collection * | src | ) |
"Steal" items from another collection.
|
inline |
Add an object to the collection.
If isOwner(), make a copy of the object.
rhs | object to add |
Definition at line 325 of file Collection.h.
|
inline |
Add an object to the collection.
rhs | object to add |
Definition at line 336 of file Collection.h.
|
inline |
Add another collection's objects.
If isOwner(), make copies of all objects added.
rhs | collection to copy objects from |
Definition at line 347 of file Collection.h.
|
inline |
Remove an object from the collection.
rhs | key to remove |
Definition at line 358 of file Collection.h.
References utl::dump(), and utl::toString().
void utl::Collection::dump | ( | Stream & | os, |
uint_t | level, | ||
bool | key, | ||
bool | printClassName, | ||
uint_t | indent, | ||
const char * | separator | ||
) | const |
Dump contained objects to a stream.
os | output stream |
level | level of 'verbosity' for the dump |
key | dump object keys? |
printClassName | print each object's class name? |
indent | indent each object? |
separator | dumped between each object |
String utl::Collection::toString | ( | bool | key | ) | const |
Obtain a string representation by invoking Object::toString() on all contained objects (or their keys).
key | invoke Object::toString() on object keys? |
|
inline |
Obtain a string represenation by invoking Object::toString() on all contained objects (or their keys).
sep | separator, such as ", " |
key | invoke Object::toString() on object keys? |
Definition at line 408 of file Collection.h.
References utl::toString().
Obtain a string represenation of the collection by invoking Object::toString() on all contained objects (or their keys).
sep | separator, such as ", " |
key | invoke Object::toString() on object keys? |
iterator utl::Collection::begin | ( | ) | const |
Return a const iterator pointing to the first object in the collection.
iterator utl::Collection::begin | ( | ) |
Return an iterator pointing to the first object in the collection.
|
pure virtual |
Return a const iterator pointing to the beginning of the collection.
Implemented in utl::Array, utl::List, utl::Hashtable, utl::BinTree, utl::SkipList, utl::Heap, utl::ObjectCache, and utl::Deque.
|
pure virtual |
Return an iterator pointing to the beginning of the collection.
Implemented in utl::Array, utl::List, utl::Hashtable, utl::BinTree, utl::SkipList, utl::Heap, utl::ObjectCache, and utl::Deque.
|
virtual |
Create a const iterator.
|
virtual |
Create an iterator.
iterator utl::Collection::end | ( | ) | const |
Return a const iterator pointing to the end of the collection.
iterator utl::Collection::end | ( | ) |
Return an iterator pointing to the end of the collection.
|
pure virtual |
Return a const iterator pointing to the end of the collection.
Implemented in utl::Array, utl::List, utl::BinTree, utl::Hashtable, utl::ObjectCache, utl::SkipList, utl::Heap, and utl::Deque.
|
pure virtual |
Return an iterator pointing to the end of the collection.
Implemented in utl::Array, utl::List, utl::BinTree, utl::Hashtable, utl::ObjectCache, utl::SkipList, utl::Heap, and utl::Deque.
|
inline |
Determine whether the collection contains an object matching the given key.
key | search key |
Definition at line 466 of file Collection.h.
References ASSERTD, and utl::count().
bool utl::Collection::contains | ( | const Object & | key | ) | const |
Determine whether the collection contains an object matching the given key.
key | search key |
size_t utl::Collection::count | ( | const Predicate * | pred = nullptr , |
bool | predVal = true |
||
) | const |
Count contained objects.
pred | (optional) predicate : require (pred(object) == predVal) |
predVal | (optional : true) predicate value |
Find an object matching a given key.
key | search key |
Definition at line 492 of file Collection.h.
References ASSERTD.
Find an object matching a given key.
key | search key |
Reimplemented in utl::Array, utl::ObjectCache, utl::List, utl::Hashtable, utl::Heap, utl::BinTree, and utl::SkipList.
Find an object matching a given key.
key | search key |
it | const result iterator (= end() if no object found) |
Definition at line 511 of file Collection.h.
References const_cast_this, IFDEBUG, and utl::FwdIt::setConst().
Find an object matching a given key.
key | search key |
it | result iterator (= end() if no object found) |
Reimplemented in utl::Array, utl::ObjectCache, utl::List, utl::Hashtable, utl::Heap, utl::BinTree, utl::TArray< T >, utl::TArray< REnode >, utl::TArray< utl::String >, utl::TArray< utl::Span< size_t > >, utl::TArray< LogStream >, utl::TArray< Terminal >, utl::TArray< utl::Stream >, utl::SkipList, and utl::Deque.
Object* utl::Collection::first | ( | ) | const |
Return the first object (nullptr if empty).
|
inline |
|
inline |
See contains().
Definition at line 537 of file Collection.h.
Object* utl::Collection::last | ( | ) | const |
Get the last object (nullptr if empty).
|
pure virtual |
Clear the collection by removing all objects.
Implemented in utl::Array, utl::List, utl::Hashtable, utl::BinTree, utl::ObjectCache, utl::SkipList, utl::Heap, utl::Deque, utl::RBtree, and utl::SpanAllocator< T, D >.
|
inline |
Remove the object matching the given key.
key | search key |
Definition at line 557 of file Collection.h.
References ASSERTD.
|
virtual |
Remove the object matching the given key.
key | search key |
Reimplemented in utl::Array, utl::List, utl::ObjectCache, utl::Hashtable, utl::SortedCollection, utl::BinTree, utl::SkipList, utl::TSkipList< T >, utl::Heap, utl::TRBtree< T >, utl::TRBtree< String >, utl::TRBtree< Production >, utl::TRBtree< Terminal >, utl::TRBtree< CmdLineArg >, utl::TRBtree< Span< T, D > >, utl::SpanCol< T, D >, and utl::SpanAllocator< T, D >.
|
virtual |
Remove the object the given iterator points to.
The iterator will be updated so that it points to the removed object's successor.
it | iterator specifying object to be removed |
Reimplemented in utl::Array, utl::List, utl::ObjectCache, utl::SortedCollection, utl::TArray< T >, utl::TArray< REnode >, utl::TArray< utl::String >, utl::TArray< utl::Span< size_t > >, utl::TArray< LogStream >, utl::TArray< Terminal >, utl::TArray< utl::Stream >, utl::Hashtable, utl::BinTree, utl::SkipList, and utl::Heap.
Remove the object the given iterator points to, but do not delete the object even if the collection owns its objects.
it | iterator specifying object to be removed |
add-or-find access operator (returns Object*).
Definition at line 589 of file Collection.h.
add-or-find access operator (returns Object&).
Definition at line 595 of file Collection.h.
References ASSERTD, utl::Object::compare(), utl::deInit(), and utl::init().