#include "BField/TIntList.h"

ClassImp(TObjNum)
ClassImp(TIntList)

TIntList::TIntList()
{
    fNum = new TObjNum(1);
    fList = new TList(fNum);
}

TIntList::~TIntList()
{ 
    fList->Delete();
    delete fList;
    delete fNum;
}

void TIntList::Add(Int_t num)
{
    fList->Add(new TObjNum(num));
}

void TIntList::AddFirst(Int_t num)
{
    fList->AddFirst(new TObjNum(num));
}

void TIntList::AddLast(Int_t num)
{
    fList->AddLast(new TObjNum(num));
}

void TIntList::Delete(Option_t* /* option */)
{ 
   fList->Delete();
}

void TIntList::AddAt(Int_t num, Int_t idx)
{
   fList->AddAt(new TObjNum(num),idx);
}

Int_t TIntList::At(Int_t slot)
{
   return ((TObjNum *)fList->At(slot))->GetNum();
}

Int_t TIntList::First(void)
{
  return ((TObjNum *)fList->First())->GetNum();
}

Int_t TIntList::Last(void)
{
  return ((TObjNum *)fList->Last())->GetNum();
}

Int_t TIntList::NumberOfElements(void)
{
  Int_t NofElements = 0;
  TObjNum * IntObj;
  TIter next(fList);
  
  while( (IntObj = (TObjNum *)next()) ) NofElements ++;
  
  delete IntObj;

  return NofElements;
}

Bool_t TIntList::Exists(Int_t num)
{
  Bool_t Exists = kFALSE;
  TObjNum * IntObj;
  TIter next(fList);
  
  while( (IntObj = (TObjNum *)next()) ) {
    if(num == IntObj->GetNum())  Exists = kTRUE;
  }
  delete IntObj;

  return Exists;
}

void TIntList::Remove(Int_t element)
{
// Remove all occurences of 'element' from the list

  TObjNum * IntObj;
  TObjNum * FndObj;
  TIter next(fList);
  
  while( (IntObj = (TObjNum *)next()) ) {
    if(element == IntObj->GetNum()) {
       FndObj = (TObjNum*) fList->Remove(IntObj);
       delete FndObj;
    }
  }

}


