123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #ifndef TRANSFRMX_LIST_H
- #define TRANSFRMX_LIST_H
- #include "txCore.h"
- class txListIterator;
- /**
- * Represents an ordered list of Object pointers. Modeled after a Java 2 List.
- **/
- class txList : public txObject {
- friend class txListIterator;
- public:
- /**
- * Creates an empty txList
- **/
- txList();
- /**
- * txList destructor, object references will not be deleted.
- **/
- ~txList();
- /**
- * Returns the number of items in this txList
- **/
- int32_t getLength();
- /**
- * Returns true if there are no items in this txList
- */
- inline bool isEmpty()
- {
- return itemCount == 0;
- }
- /**
- * Adds the given Object to the list
- **/
- nsresult add(void* objPtr);
- /*
- * Removes all the objects from the list
- */
- void clear();
- protected:
- struct ListItem {
- ListItem* nextItem;
- ListItem* prevItem;
- void* objPtr;
- };
- /**
- * Removes the given ListItem pointer from the list
- **/
- ListItem* remove(ListItem* sItem);
- private:
- txList(const txList& aOther); // not implemented
- ListItem* firstItem;
- ListItem* lastItem;
- int32_t itemCount;
- nsresult insertAfter(void* objPtr, ListItem* sItem);
- nsresult insertBefore(void* objPtr, ListItem* sItem);
- };
- /**
- * An Iterator for the txList Class
- **/
- class txListIterator {
- public:
- /**
- * Creates a new txListIterator for the given txList
- * @param list, the txList to create an Iterator for
- **/
- explicit txListIterator(txList* list);
- /**
- * Adds the Object pointer to the txList pointed to by this txListIterator.
- * The Object pointer is inserted as the next item in the txList
- * based on the current position within the txList
- * @param objPtr the Object pointer to add to the list
- **/
- nsresult addAfter(void* objPtr);
- /**
- * Adds the Object pointer to the txList pointed to by this txListIterator.
- * The Object pointer is inserted as the previous item in the txList
- * based on the current position within the txList
- * @param objPtr the Object pointer to add to the list
- **/
- nsresult addBefore(void* objPtr);
- /**
- * Returns true if a successful call to the next() method can be made
- * @return true if a successful call to the next() method can be made,
- * otherwise false
- **/
- bool hasNext();
- /**
- * Returns the next Object pointer from the list
- **/
- void* next();
- /**
- * Returns the previous Object pointer from the list
- **/
- void* previous();
-
- /**
- * Returns the current Object
- **/
- void* current();
-
- /**
- * Removes the Object last returned by the next() or previous() methods;
- * @return the removed Object pointer
- **/
- void* remove();
- /**
- * Resets the current location within the txList to the beginning of the txList
- **/
- void reset();
- /**
- * Resets the current location within the txList to the end of the txList
- **/
- void resetToEnd();
- private:
- //-- points to the current list item
- txList::ListItem* currentItem;
- //-- points to the list to iterator over
- txList* list;
- //-- we've moved off the end of the list
- bool atEndOfList;
- };
- typedef txList List;
- #endif
|