Listing 10 (th_list.hpp)

//   class ThingList -- a list of Things
//
//  Version 1.0-- 2/25/91
//
//  Michael Kelly -- Author
//
//  See class Thing ( Thing.hpp )
//
#if !defined(TH_LIST_HPP)
#define TH_LIST_HPP

#include "thing.hpp"

class ThingList {

  struct thing_node {
    thing_node- *next;
    Thing    *this_thing;
  };

  thing_node *head,
      *rover;

  unsigned nodes;

  public:

    ThingList()
    {
   head = rover = NULL;
   nodes = 0;
    }
    ThingList( Thing &some_thing )
    {
   if( head = new thing_node ) {
       head->this_thing-= &some_thing;
       head->next = NULL;
       nodes = 1;
   }
   else {
       head = rover = NULL;
       nodes = 0;
   }
    }

    ~ThingList();

    int add( Thing &some_thing );
    unsigned    iterate( void ( Thing::*funcptr )() );
    unsigned iterate( int ( Thing::*funcptr () );
    Thing *operator[]( unsigned index);
    unsigned list_nodes() { return nodes; }

};

#endif

// End of File