// ----------------------------------------------------------------------
//
// File: list.h
//
// This module implements a List class for integers.
// The module is inteded for CTA++ demonstation purposes only.
// Copyright (c) 1998-2002 Testwell Oy
//
// Last edited: 12.12.2002
//
// ----------------------------------------------------------------------
// ----------------------------------------------------------------------
// First some exception classes
// ----------------------------------------------------------------------
class Exception {};
class ExceptionEmptyList : public Exception {};
class ExceptionIteratorOutOfBounds : public Exception {
public:
ExceptionIteratorOutOfBounds(const char* msg) : message(msg) {}
const char* getMsg() const { return message; }
private:
const char* message;
};
class ExceptionItemNotFound : public Exception {};
class ExceptionOutOfMemory : public Exception {};
// a couple of forward declarations
class List_iterator;
class List_reverse_iterator;
// the initial size of the list
const int LIST_STEP = 16;
// ----------------------------------------------------------------------
// Class List
// ----------------------------------------------------------------------
class List {
public:
List();
~List();
void insert(int t);
int extract();
void remove(int t);
List_iterator begin() const ;
List_iterator last() const ;
List_reverse_iterator rbegin() const;
bool empty() const;
int itemCount() const;
private:
int* last_element;
int* the_list;
int item_count;
int list_size;
friend class List_iterator;
friend class List_reverse_iterator;
}; // class List
// ----------------------------------------------------------------------
// An iterator class to the actual List class
// ----------------------------------------------------------------------
class List_iterator {
public:
// public methods of the class
List_iterator(const List* l);
List_iterator(const List* l, int* iter);
bool end() const;
int operator*();
List_iterator& operator++();
private:
int* iter_list;
const List* list;
};
// ----------------------------------------------------------------------
// A reverse iterator class to the actual List class
// ----------------------------------------------------------------------
class List_reverse_iterator {
public:
List_reverse_iterator(const List* l);
List_reverse_iterator(const List* l, int* iter);
bool rend();
int operator*();
List_reverse_iterator& operator--();
private:
const List* list;
int* iter_list;
};
// EOF