#ifndef __CARRAYITERATOR_H
#define __CARRAYITERATOR_H
#include "IrDATypes.h"
enum IterateDirection { kIterateBackward = 0, kIterateForward = 1 };
class CList;
class CSortedList;
class CDynamicArray;
class CArrayIterator : public OSObject
{
OSDeclareDefaultStructors(CArrayIterator);
public:
static CArrayIterator* cArrayIterator();
static CArrayIterator* cArrayIterator(CDynamicArray* itsDynamicArray);
static CArrayIterator* cArrayIterator(CDynamicArray* itsDynamicArray, Boolean itsForward);
static CArrayIterator* cArrayIterator(CDynamicArray* itsDynamicArray,
ArrayIndex itsLowBound, ArrayIndex itsHighBound,
Boolean itsForward);
void free();
bool init(void);
Boolean init(CDynamicArray* itsDynamicArray);
Boolean init(CDynamicArray* itsDynamicArray, Boolean itsForward);
Boolean init(CDynamicArray* itsDynamicArray, ArrayIndex itsLowBound,
ArrayIndex itsHighBound, Boolean itsForward);
void InitBounds(ArrayIndex itsLowBound, ArrayIndex itsHighBound, Boolean itsForward);
void Reset(void);
void ResetBounds(Boolean goForward = true);
void SwitchArray(CDynamicArray* newArray, Boolean itsForward = kIterateForward);
ArrayIndex FirstIndex(void);
ArrayIndex NextIndex(void);
ArrayIndex CurrentIndex(void);
void RemoveElementsAt(ArrayIndex theIndex, ArrayIndex theCount);
void InsertElementsBefore(ArrayIndex theIndex, ArrayIndex theCount);
void DeleteArray(void);
Boolean More(void);
protected:
void Advance(void);
CDynamicArray* fDynamicArray;
ArrayIndex fCurrentIndex; ArrayIndex fLowBound; ArrayIndex fHighBound; Boolean fIterateForward;
private:
friend class CDynamicArray;
friend class CList;
CArrayIterator* AppendToList(CArrayIterator* toList);
CArrayIterator* RemoveFromList(void);
CArrayIterator* fPreviousLink; CArrayIterator* fNextLink;
};
#endif