#ifndef __TABMOD_H
#define __TABMOD_H

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

// @doc EXTERNAL

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

// @author:(INTERNAL) Alex

// @access:(INTERNAL) Private Member
{
  // @cmember:(INTERNAL) Nome della tabella
  TString4 _tabname;
  // @cmember:(INTERNAL) Modulo della tabella
  TString4 _module;
  // @cmember:(INTERNAL) cliente
  long _customer;
  // @cmember:(INTERNAL) Descrizione della tabella
  TString _description;

// @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 scrive il record <p rec>
  virtual int _write(const TRectype& rec);
  // @cmember riscrive il record <p rec>
  virtual int _rewrite(const TRectype& rec);
  // @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 Testa se il record fa parte della tabella
	bool in_table() const ;
  // @cmember Testa se il record fa non parte della tabella
	bool not_in_table() const { return !in_table(); }
  // @cmember Vuota tutto il record passato usando il carattere <p c>
  void zero_rec(TRectype& rec, char c);

	// @access Public Member
public:
  // @cmember Salta <p nrec> record dalla posizione corrente
  virtual int skip(TRecnotype nrec, word lockop = _nolock);
  // @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() const;
 // @cmember Ritorna il cliente al quale appartiene la tabella
  long customer() const;

  // @cmember Ritorna la descrizione della tabella
  virtual const char* description();
	// @controlla se la tabella e' vuota
	virtual bool empty();
  // @cmember Ritorna la relapp che gestisce la tabella
  virtual bool get_relapp(TString& app) const;
  // @cmember Vuota tutto il record
  virtual void zero();
  // @cmember Vuota tutto il record usando il carattere <p c>
  virtual void zero(char c = '\0');

  // @cmember Costruttore
  TModule_table(const char* tabname);
  // @cmember Distruttore
	virtual ~TModule_table() {}
};


#endif // __TABUTIL_H