public class BBag extends BSet {

  public BBag(int size) {
    super(size);
    count = new int[size];
  }
  
  public void add(int el) {
    int i;
    for (i=0; (i<nelt)&&(elts[i]!=el); ++i);
    if(nelt < nmax) {
      if(i==nelt) {
	elts[i]=el;
	count[i]=1;
	nelt++;
      }
      else 
	count[i]++;
    }
  }

  public void add_many(int el, int num) {
    int i;
    for (i=0; i<num; ++i) 
      add(el);
  }

  public void remove(int el) {
    int i;
    for (i=0; (i<nelt)&&(elts[i]!=el);++i);
    if (i<nelt) {
      if (count[i]>1)
	count[i]--;
      else {
	for(i++; i<nelt; i++) {
	  elts[i-1]=elts[i];
	  count[i-1]=count[i];
	}
	nelt--;
      }
    }
  }
  
  public void remove_many(int el, int num) {
    int i;
    for (i=0; i<num; ++i)
      remove(el);
    }
  
  public int size() {
    int sz = 0;
    int i;
    for (i = 0; i<nelt; ++i)
      sz = sz + count[i];
    return sz;
  }

  public int number(int el) {
    if (!super.has(el)) return 0;
    else {
      int i;
      for (i=0; elts[i]!=el; ++i);
      return count[i];
    }
  }
  
  private int count[];
}
Back