Listing 6: Interface for class MergeList

/*
 *  mlist.h
 */

#if !defined __MLIST_H
#define __MLIST_H
#include "mfile.h"
#include "\classlib\dlistimp.h"     //container lib

class MergeList     {
    TIDoubleListImp<MergeFile> *Mp;  // merge list
    TIDoubleListImp<MergeFile> *Ap;  // active list
    TIDoubleListIteratorImp<MergeFile> *Mi, *Ai;
    int _nfiles;  /* #merge files/buffers allocated */
    const size_t _blen;     /* merge buffer length */
  public:
    MergeList( int nfiles, const int itemwd, const size_t blen );
    ~MergeList();
    int MergeFileCount() const { return _nfiles;  }
    size_t MergeBufferSize() const { return _blen; }

    int ActiveCount()  const
        { return Ap->GetItemsInContainer(); }
    int PutActive( const MergeFile *p )
        { return Ap->AddAtTail( p );   }
    void RestartActive() const { Ai->Restart();  }
    MergeFile* CurrentActive() const
        { return Ai->Current();  }
    void NextActive() const {  (*Ai)++;  }
    int TestActive() const { return *Ai; }
    int DetachActive( MergeFile *p )
        { return Ap->Detach( p );  }

    int PutHead(const MergeFile *p)
        {   return Mp->AddAtHead( p );  }
    int PutTail(const MergeFile *p)
        {   return Mp->AddAtTail( p );  }
    int GetHead(MergeFile * &p)
        {   p = Mp->PeekHead();
            return Mp->DetachAtHead();  }
    int GetTail(MergeFile * &p)
        {   p = Mp->PeekTail();
            return Mp->DetachAtTail();  }
    MergeFile* PeekHead() const
        {   return Mp->PeekHead();      }
    MergeFile* PeekTail() const
        {   return Mp->PeekTail();      }
    int Test() const { return *Mi; }
    MergeFile* Current() const
        { return (MergeFile *) Mi->Current();  }
    void Next() const {  (*Mi)++;  }
    void Restart() const {  Mi->Restart();   }
};
#endif
// End of File