#include "intbagd.hpp"

intbag::intbag(void)
{
  head.link = NULL;
  cursor = &head;
}

intbag::~intbag(void)
{
  intbagnode * p = NULL;
  while( head.link != NULL )
  {
    p = head.link->link;
    delete head.link;
    head.link = p;
  }      
}

int intbag::count(void)
{
  int n = 0;
  intbagnode * p = head.link;
  while (p)
    {
      n++;
      p = p->link;
    }
  return n;
}

int intbag::full(void)
{
  return 0;
}

int intbag::empty(void)
{
  return head.link == NULL;
}

void intbag::insert(int x)
{
  intbagnode * p;
  p = new intbagnode;
  p->data = x;
  p->link = head.link;
  head.link = p;
}

void intbag::remove(int x)
{
  intbagnode * p,* q;
  p = head.link;
  while( p->link != NULL && p->link->data != x )
    p = p->link;
  q = p->link->link;
  delete p->link;
  p->link = q;
}

int intbag::has(int x)
{
  intbagnode * p = head.link;
  while (p)
    {
      if (p->data == x)
	return 1;
      else
	p = p->link;
    }
  return 0;
}

int * intbag::next(void)
{
  cursor = cursor->link;
  if (cursor)
    return &cursor->data;
  else
    return NULL;
}

void intbag::resetcursor(void)
{
  cursor = &head;
}







