#ifndef __SORT_H
#define __SORT_H

#ifndef __OBJECT_H
#include <object.h>
#endif 

class TRecfield;

// @doc EXTERNAL

// @class TSort | Classe per l'ordinamento di strutture o di record
//
// @base public | TObject
class TSort : public TObject
// @author:(INTERNAL) Sandro
{
  // @access:(INTERNAL) Private Member

  // @cmember:(INTERNAL) Puntatore alla struttura di un sort
  struct s_prm* _sortvar; 
  // @cmember:(INTERNAL) Indice nella tabella dei campi della chiave
  int   nsortkey;         

  // @access Public Member
public:
  // @cmember Inizializza il sort
  void init();
  // @cmember Aggiunge un record al sort
  void sort(const char * record);
  // @cmember Chiude il sort
  void endsort();
  // @cmember Restituisce il prossimo record ordinato (ultimo NULL)
  const char* retrieve();
  // @cmember Stampa una statistica sul sort
  void stats();

  // @cmember Ritorna la lunghezza del record di sort
  int length() const;
  // @cmember Imposta la lunghezza del record di sort e inizializza il sort
  void reset(int len);
  // @cmember Inizializza una chiave di ordinamento per il sort
  void addsortkey(int pos, int len, char direction = 'a');
  // @cmember Inizializza una chiave di ordinamento per il sort usando il campo di un file
  void addsortkey(TRecfield& f, char direction = 'a');

  // @cmember Costruttore
  TSort(int reclen = 0);
  // @cmember Distruttore
  virtual ~TSort();
};

#endif // __SORT_H