Code Fragment: List



template <typename Object>
class List {						// List interface
public:
  class Position;					// node position type
							// query functions
  int size() const;
  bool isEmpty() const;
  bool isFirst(const Position& p) const         throw(InvalidPositionException);
  bool isLast(const Position& p) const          throw(InvalidPositionException);
							// accessor functions
  Position first() const                        throw(EmptyContainerException);
  Position last() const                         throw(EmptyContainerException);
  Position before(const Position& p) const      throw(InvalidPositionException,
						      BoundaryViolationException);
  Position after(const Position& p) const       throw(InvalidPositionException,
						      BoundaryViolationException);
							// update functions
  Position insertBefore(const Position& p, const Object& element) 
    						throw(InvalidPositionException);
  Position insertAfter(const Position& p, const Object& element) 
    						throw(InvalidPositionException);
  Position insertFirst(const Object& element);
  Position insertLast(const Object& element);
  void remove(const Position& p)		throw(InvalidPositionException);
  void replaceElement(const Position& p, const Object& element)  
    						throw(InvalidPositionException);
  void swapElements(const Position& a, const Position& b)
    						throw(InvalidPositionException);
};