270 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			270 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#ifndef __STRINGS_H
 | 
						|
#define __STRINGS_H
 | 
						|
 | 
						|
#ifndef __STRING_H
 | 
						|
#include <string.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __OBJECT_H
 | 
						|
#include <object.h>
 | 
						|
#endif
 | 
						|
 | 
						|
// @C
 | 
						|
// Classe TString : public TObject
 | 
						|
// @END
 | 
						|
 | 
						|
class TString : public TObject
 | 
						|
{
 | 
						|
protected:
 | 
						|
  // @DPROT
 | 
						|
  char* _str;   // Puntatore alla stringa
 | 
						|
  int _size;    // Lunghezza
 | 
						|
  // @END
 | 
						|
 | 
						|
  // @FPROT
 | 
						|
  int make_room(int size);   // Cerca spazio per altri size caratteri
 | 
						|
  TString& set(const char*); // Inizializza con la stringa puntata da char* di lunghezza size
 | 
						|
 | 
						|
  TString(char* str, int size) : _str(str), _size(size) {}
 | 
						|
 | 
						|
public:
 | 
						|
  // @FPUB
 | 
						|
  virtual void resize(int size, bool cpy); // Ri/alloca la stringa
 | 
						|
 | 
						|
  TString();
 | 
						|
  TString(int size);         // Default constructor for a string of given size
 | 
						|
  TString(const char* s);    // Costruttore a partire da una stringa s
 | 
						|
  TString(const TString& s); // Costruttore da un oggetto TString s
 | 
						|
  virtual ~TString();        // Deallocates the string
 | 
						|
 | 
						|
  ///////////////////////////////////////////////////////////
 | 
						|
    // @DES Methods derived from TObject
 | 
						|
    ///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
      // @FPUB
 | 
						|
      virtual const char* class_name() const;       // Ritorna il nome della classe
 | 
						|
  virtual word class_id() const;                // Ritorna l'identificatore della classe
 | 
						|
  virtual bool ok() const { return _str != NULL; }
 | 
						|
  virtual TObject* dup() const;
 | 
						|
  virtual void print_on(ostream& out) const;
 | 
						|
  virtual void read_from(istream& in);
 | 
						|
  virtual word hash() const; // Return hash value
 | 
						|
 | 
						|
  ///////////////////////////////////////////////////////////
 | 
						|
    // @DES Query methods
 | 
						|
    ///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
      // @FPUB
 | 
						|
      operator const char*() const { return (const char*)_str; }  // *(TString) -> _str
 | 
						|
  char& operator[](int i) const { return _str[i]; }           // TString[i] -> _str[i]
 | 
						|
 | 
						|
  int size() const { return _size; }
 | 
						|
  int len() const { return strlen(_str); }
 | 
						|
  bool empty() const { return *_str == '\0'; }
 | 
						|
  bool not_empty() const { return *_str != '\0'; }
 | 
						|
 | 
						|
  int find(char, int from = 0) const;   // Ritorna la posizione del carattere char nell'oggetto TString
 | 
						|
  int find(const char* s, int from = 0) const; // Ritorna la posizione della stringa s nell'oggetto TString
 | 
						|
 | 
						|
  const char* left(int count) const; // Ritorna l'oggetto TString composto dai count caratteri da sinistra
 | 
						|
  const char* mid(int from, int count = -1) const; // Ritorna l'oggetto TString composto dai count caratteri a partire da from
 | 
						|
  const char* sub(int from, int to = -1) const; // Ritorna la stringa da FROM a TO (escluso)
 | 
						|
  const char* right(int count) const;        // Ritorna l'oggetto TString composto dai count caratteri da destra
 | 
						|
 | 
						|
  ///////////////////////////////////////////////////////////
 | 
						|
    // @DES Modifying methods
 | 
						|
    ///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
      // @FPUB
 | 
						|
      TString& fill(char c, int n = -1);         // Riempie con n caratteri c
 | 
						|
  TString& spaces(int n = -1) { return fill(' ', n); }
 | 
						|
  TString& overwrite(const char* s, int pos = 0); // Sovrascrive la stringa s dalla posizione pos
 | 
						|
  TString& insert(const char* s, int pos = 0);    // Inserisce la stringa s dalla posizione pos
 | 
						|
 | 
						|
  TString& strip(const char* k);  // Elimina tutti i caratteri contenuti in k
 | 
						|
  TString& strip_spaces();   // Elimina tutti gli spazi non contenuti tra apici singoli o doppi
 | 
						|
  TString& ltrim(int n = 0); // Elimina gli spazi da sinistra se n=0 altrimenti elimina i primi n caratteri (da sinistra).
 | 
						|
  TString& rtrim(int n = 0); // Elimina gli spazi da destra se n=0 altrimenti elimina i primi n caratteri (da destra).
 | 
						|
  TString& trim();                                       // ltrim e rtrim
 | 
						|
 | 
						|
  TString& right_just(int n = -1, char c = ' ');  // Giustifica a destra
 | 
						|
  TString& center_just(int n = -1, char c = ' '); // Centra
 | 
						|
  TString& left_just(int n = -1, char c = ' ');   // Giustifica a sinistra
 | 
						|
 | 
						|
  TString& picture(const char* pic, const char* s);
 | 
						|
  TString& format(const char* fmt, ...);
 | 
						|
 | 
						|
  TString& cut(int n);  // Inserisce un '\0' alla posizione n-esima.
 | 
						|
 | 
						|
  TString& upper();     // Mette la stringa in maiuscolo
 | 
						|
  TString& lower();     // Mette la stringa in minuscolo
 | 
						|
 | 
						|
  ///////////////////////////////////////////////////////////
 | 
						|
    // @DES Standard operators
 | 
						|
    ///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
      // @FPUB
 | 
						|
      const TString& operator =(const TString& s) { return set(s._str); }
 | 
						|
  const TString& operator =(const char* s) { return set(s); }
 | 
						|
 | 
						|
  TString& operator <<(const char*);
 | 
						|
  TString& operator <<(char);
 | 
						|
  TString& operator <<(int);
 | 
						|
  TString& operator <<(long);
 | 
						|
  TString& operator <<(double);
 | 
						|
  TString& operator <<(const TObject& obj);
 | 
						|
  TString& operator <<(const TString& str);     // For efficiency only
 | 
						|
 | 
						|
  bool operator ==(const char* s) const { return strcmp(_str, s) == 0; }
 | 
						|
  bool operator ==(char* s) const { return strcmp(_str, s) == 0; }
 | 
						|
  bool operator ==(const TString& s) const { return strcmp(_str, s._str) == 0; }
 | 
						|
  bool operator !=(const char* s) const { return strcmp(_str, s) != 0; }
 | 
						|
  bool operator !=(char* s) const { return strcmp(_str, s) != 0; }
 | 
						|
  bool operator !=(const TString& s) const { return strcmp(_str, s._str) != 0; }
 | 
						|
  bool operator  <(const char* s) const { return strcmp(_str, s)  < 0; }
 | 
						|
  bool operator  >(const char* s) const { return strcmp(_str, s)  > 0; }
 | 
						|
  bool operator >=(const char* s) const { return strcmp(_str, s) >= 0; }
 | 
						|
  bool operator <=(const char* s) const { return strcmp(_str, s) <= 0; }
 | 
						|
  bool match(const char* s) const; 
 | 
						|
  bool compare(const char* s, int max = -1, bool ignorecase = FALSE) const;
 | 
						|
};
 | 
						|
 | 
						|
// @C
 | 
						|
// Classe TFixed_string : public TString
 | 
						|
// @END
 | 
						|
 | 
						|
class TFixed_string : public TString
 | 
						|
{
 | 
						|
protected:
 | 
						|
  virtual void resize(int size, bool cpy);      // Causa un errore fatale!
 | 
						|
 | 
						|
public:
 | 
						|
  TFixed_string(const char* str, int size = -1);
 | 
						|
  virtual ~TFixed_string();
 | 
						|
 | 
						|
  const TString& operator =(const TString& s) { return set((const char*)s); }
 | 
						|
  const TString& operator=(const char* s) { return set(s); }
 | 
						|
 | 
						|
  void strncpy(const char* s, int n);
 | 
						|
};
 | 
						|
 | 
						|
class TString16 : public TFixed_string
 | 
						|
{
 | 
						|
  char _str16[17];
 | 
						|
 | 
						|
public:
 | 
						|
  TString16(const char* str = "") : TFixed_string(_str16, 17) { set(str); }
 | 
						|
  const TString& operator =(const TString& s) { return set((const char*)s); }
 | 
						|
  const TString& operator=(const char* s) { return set(s); }
 | 
						|
};
 | 
						|
 | 
						|
class TString80 : public TFixed_string
 | 
						|
{
 | 
						|
  char _str80[81];
 | 
						|
 | 
						|
public:
 | 
						|
  TString80(const char* str = "") : TFixed_string(_str80, 81) { set(str); }
 | 
						|
  const TString& operator =(const TString& s) { return set((const char*)s); }
 | 
						|
  const TString& operator=(const char* s) { return set(s); }
 | 
						|
};
 | 
						|
 | 
						|
class TString256 : public TFixed_string
 | 
						|
{
 | 
						|
  char _str256[257];
 | 
						|
 | 
						|
public:
 | 
						|
  TString256(const char* str = "") : TFixed_string(_str256, 257) { set(str); }
 | 
						|
  const TString& operator =(const TString& s) { return set((const char*)s); }
 | 
						|
  const TString& operator=(const char* s) { return set(s); }
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
 | 
						|
// @C
 | 
						|
// Classe TFilename : public TString
 | 
						|
// @END
 | 
						|
 | 
						|
class TFilename : public TString
 | 
						|
{
 | 
						|
public:
 | 
						|
  // @FPUB
 | 
						|
 | 
						|
  TFilename(const char* n = "") : TString(24) { set(n); }
 | 
						|
 | 
						|
  const TString& operator =(const char* s) { return set(s); }
 | 
						|
  // assegnazione tra TFile e stringa
 | 
						|
 | 
						|
  const char* ext() const;      // Ritorna l'estensione
 | 
						|
  void ext(const char*);        // Imposta come estensione la stringa puntata da char*
 | 
						|
 | 
						|
  const char* name() const;     // Ritorna il nome del file
 | 
						|
  TString& temp(const char* prefix = NULL);     // Genera il nome di un file temporaneo
 | 
						|
  TString& tempdir();                    // Genera il nome della directory temporanea
 | 
						|
};
 | 
						|
 | 
						|
// @C
 | 
						|
// Classe TToken_string : public TString
 | 
						|
// @END
 | 
						|
 | 
						|
class TToken_string : public TString
 | 
						|
{
 | 
						|
  // @DPRIV
 | 
						|
  char _separator;      // Carattere separatore
 | 
						|
  int _last;            // Puntatore all'ultimo
 | 
						|
 | 
						|
protected:
 | 
						|
  // @FPROT
 | 
						|
 | 
						|
  TObject* dup() const; // Crea un duplicato della token string
 | 
						|
  bool set_item(const char* v, int n);
 | 
						|
 | 
						|
public:
 | 
						|
  // @FPUB
 | 
						|
  TToken_string(const char* = "", char separator = '|');
 | 
						|
  TToken_string(int n, char separator = '|');
 | 
						|
  TToken_string(const TToken_string& s);
 | 
						|
 | 
						|
  void separator(char s) { _separator = s; }    // Setta il separatore a s
 | 
						|
 | 
						|
  void restart() { _last = empty() ? -1 : 0; } // Rimette all'inizio il puntatore
 | 
						|
  const TString& operator =(const char* s) { set(s);restart();return *this; }
 | 
						|
  const TString& operator =(const TString& s) { set(s);restart();return *this; }
 | 
						|
 | 
						|
  void add(const char* s, int n = -1); // Aggiunge un token
 | 
						|
  void add(char c, int pos = -1); // Aggiunge un char
 | 
						|
  void add(long n, int pos = -1);             // Aggiunge un intero
 | 
						|
  void add(int n, int pos = -1);             // Aggiunge un intero
 | 
						|
  void destroy(int pos);        // Toglie il token pos
 | 
						|
  const char* get();            // Ritorna il prossimo token
 | 
						|
  const char* get(int n);       // Ritorna un token (-1 = prossimo; -2 = ultimo; n = ennesimo)
 | 
						|
  char get_char(int n = -1);    // Ritorna un carattere
 | 
						|
  int get_int(int n = -1);      // Ritorna un intero
 | 
						|
  long get_long(int n = -1);    // Ritorna un intero esteso
 | 
						|
  int get_pos(const char* s);           // Ritorna la posizione dell'item s
 | 
						|
  int items() const;            // Ritorna il numero di token presenti
 | 
						|
  bool empty_items() const;     // Controlla se tutti i token sono nulli
 | 
						|
};
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// @DES Paragraph
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TParagraph_string : public TToken_string
 | 
						|
{
 | 
						|
  int _width;
 | 
						|
  bool _fixed;
 | 
						|
 | 
						|
protected:
 | 
						|
  void tokenize();
 | 
						|
 | 
						|
public:
 | 
						|
  TParagraph_string(const char* s, int width);
 | 
						|
  const TString& operator =(const char* s);
 | 
						|
  void set_width(int width) { _width = width; }
 | 
						|
};
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
 |