// ННГУ, ВМК, Курс "Методы программирования-2", С++, ООП
//
// arraytab.h - Copyright (c) Гергель В.П. 03.09.2000
//
// Таблицы - базовый класс для таблиц с непрерывной памятью

#ifndef __ARRAYTAB_H
#define __ARRAYTAB_H

#include "ttable.h"

#define TabMaxSize  25

enum TDataPos { FIRST_POS, CURRENT_POS, LAST_POS };

class TArrayTable : public TTable {
  protected:
    PTTabRecord *pRecs; // память для записей таблицы
    int TabSize;        // макс. возм. к-во записей
    int CurrPos;        // номер текущего записи (нумерация от 0)
  public:
    TArrayTable(int Size=TabMaxSize) {
      pRecs = new PTTabRecord[Size];
      for ( int i=0; i<Size; i++ ) pRecs[i] = NULL;
      TabSize = Size; DataCount = CurrPos = 0;
    }
   ~TArrayTable() {
      for ( int i=0; i<DataCount; i++ )
        delete pRecs[i];
      delete [] pRecs;
    }
    // информационные методы
    virtual int IsFull() const {                     // таблица заполнена ?
      return DataCount >= TabSize;
    }
    int GetTabSize() const { return TabSize; }       // к-во записей
    // доступ
    virtual TKey GetKey( void ) const { return GetKey(CURRENT_POS); } // ключ
    virtual PTDatValue GetValuePtr( void ) const {   // указатель на значение
      return GetValuePtr(CURRENT_POS);
    }
    virtual TKey GetKey( TDataPos mode ) const;            // ключ
    virtual PTDatValue GetValuePtr( TDataPos mode ) const; // указ-ль на значен.
    // навигация
    virtual int Reset       ( void );          // установить на первую запись
    virtual int IsTabEnded  ( void ) const;    // таблица завершена ?
    virtual int GoNext      ( void );          // переход к следующей записи
                // (=1 после применения GoNext для последней записи таблицы)
    virtual int SetCurrentPos ( int pos );     // установить текущую запись
    int GetCurrentPos ( void ) const {         // получить номер текущей записи
      return CurrPos;
    }
    friend TSortTable;
};
#endif
Хостинг от uCoz