#ifndef __TABUTIL_H
#define __TABUTIL_H

#ifndef __ISAM_H
#include <isam.h>
#endif 

// @doc EXTERNAL

// @class TTable | Classe per la descrizione delle tabelle
//
// @base public | TLocalisamfile
class TTable : public TLocalisamfile

// @author:(INTERNAL) Sandro

// @access:(INTERNAL) Private Member
{
  // @cmember:(INTERNAL) Nome della tabella
  TString16 _tabname;
  // @cmember:(INTERNAL) Modulo della tabella
  TString16 _module;
  // @cmember:(INTERNAL) Descrizione della tabella
  TString _description;
  // @cmember:(INTERNAL) Flag che indica l'avvenuto caricamento di descrizione e modulo
  bool _des_mod_loaded;

// @access Protected Member
protected:
  void load_module_description();
  // @cmember Legge il record e lo copia in <p rec> (vedi <t TReclock> e <t TIsamop>)
  virtual int _read(TRectype& rec, word op = _isequal, word lockop = _nolock);
  // @cmember Legge il record alla posizione <p nrec> e lo copia in <p rec> (vedi <t TReclock>)
  virtual int _readat(TRectype& rec, TRecnotype nrec, word lockop = _nolock);
  // @cmember Ritorna il descrittore del file isam
// @access Public Member
public:
  // @cmember Salta <p nrec> record dalla posizione corrente
  virtual int skip(TRecnotype nrec, word lockop = _nolock);
  // @cmember Controlla se si tratta di una tabella (ritorna sempre TRUE)
  virtual bool tab() const 
  { return TRUE; }
  // @cmember Ritorna il nome della tabella
  virtual const char* name() const 
  { return _tabname;}
  // @cmember Ritorna il modulo al quale appartiene la tabella
  const char* module();
  // @cmember Ritorna la descrizione della tabella
  virtual const char* description();
  // @cmember Costruttore
  TTable(const char* tabname);
  // @cmember Distruttore
  virtual ~TTable();

  // @cmember Ritorna la relapp che gestisce la tabella
  virtual bool get_relapp(TString& app) const;

  // @cmember Ritorna il numero logico della tabella <p tabname>
  static int name2log(const char* tabname);
};


#endif // __TABUTIL_H