/***********************************************************************/
/* file label_container_iter.h                                               */
/* contains the class definition of class label_container_iter which is      */
/* an abstract iterator class for label_container.                           */
/*                                                                     */
/* warning: this class is only a auxiliary class for class label_container.  */
/* NEVER USE THIS CLASS BY ITSELF.                                     */
/* exception: use with another data structure, then make sure that     */
/* label_container_iter.cc is also included.                                 */
/***********************************************************************/

#ifndef LABEL_CONTAINER_ITER_H
#define LABEL_CONTAINER_ITER_H

#include "label_container_item.h"
#include "label_container.h"

#define forall(X) X->init(); while(X->step())

template <class type>
class label_cont_iterator
{
public:
   label_cont_iterator() { }                             // default constr.
   label_cont_iterator(const label_container<type> *) { }       // constructor
   label_cont_iterator(const label_cont_iterator<type> &) { }   // copy constructor
   virtual ~label_cont_iterator() { }                     // destructor
   virtual void init()= 0;                          // initialize
   virtual int step()= 0;                           // step to next node
   virtual label_container_item<type> *current()= 0;      // return thecurr node
   virtual type c_value()= 0;
   virtual int c_label()= 0;
};

#endif