guy 18a40d0a62 Patch level : 10.0
Files correlati     : ve1.exe
Ricompilazione Demo : [ ]
Commento            :
0001643: Gestione campi trasparenti nei report
Per quei campi dove non risulta settato il valore dello sfondo (trasparente, pieno, ecc..) metteremo di default pieno. Questo dovrebbe simulare il comportamento del programma prima della modifica.


git-svn-id: svn://10.65.10.50/trunk@20498 c028cbd2-c16b-5b4b-a496-9718f37d4682
2010-05-26 08:56:55 +00:00

330 lines
12 KiB
C++
Executable File
Raw Blame History

#ifndef __ARRAY_H
#define __ARRAY_H
#ifndef __OBJECT_H
#include <object.h>
#endif
#ifndef NULL
#define NULL 0L
#endif
// @doc EXTERNAL
//
// @type COMPARE_FUNCTION | Prototipo funzione di confronto tra elementi della
// classe <c TObject> da passare al metodo sort dei <c TArray>
typedef int (*COMPARE_FUNCTION)(const TObject**, const TObject**);
// @doc EXTERNAL
// @type CONDITION_FUNCTION | Prototipo funzione di ricerca/filtro
// per i derivati di <c TObject> da passare ai metodi dei <c TContainer>
typedef bool (*CONDITION_FUNCTION) ( const TObject& );
// @doc EXTERNAL
// @type OPERATION_FUNCTION | Prototipo funzione attuatore
// da passare ai metodi sort dei <c TContainer>
typedef void (*OPERATION_FUNCTION) ( const TObject& );
// @doc EXTERNAL
// @class TContainer | Generico contenitore ad accesso casuale (con indice)
// @base public | TObject
class TContainer : public TObject
{
// @author:(INTERNAL) Matteo
// @access:(INTERNAL) Private Member
private:
// @cmember:(INTERNAL) Ultima condizione di ricerca/filtro (vedi <t CONDITION_FUNCTION>)
CONDITION_FUNCTION _last_condition;
// @access Public Member
public:
// @cmember Ritorna un puntatore al primo oggetto del contenitore
virtual TObject* first_item( ) pure;
// @cmember Ritorna un puntatore all'ultimo oggetto del contenitore
virtual TObject* last_item( ) pure;
// @cmember Ritorna un puntatore all'oggetto successivo all'oggetto corrente
virtual TObject* succ_item( ) pure;
// @cmember Ritorna un puntatore all'oggetto che precede l'oggetto corrente
virtual TObject* pred_item( ) pure;
// @cmember Ritorna il numero di oggetti nel contenitore
virtual long objects( ) const pure;
// @cmember Ritorna true se il contenitore e' vuoto
virtual bool empty() const
{ return objects( ) == 0; }
// @cmember Cerca il successivo elemento che soddisfa la <t OPERATION_FUNCTION>
virtual void for_each( OPERATION_FUNCTION );
// @cmember Cerca il successivo elemento che soddisfa la <t OPERATION_FUNCTION>
// per ogni elemento di <t CONDITION_FUNCTION>
virtual void for_each_that( OPERATION_FUNCTION, CONDITION_FUNCTION = NULL );
// @cmember Ritorna il puntatore al primo oggetto che soddisfa la condizione
virtual TObject* first_that( CONDITION_FUNCTION = NULL );
// @cmember Ritorna il puntatore all'ultimo oggetto che soddisfa la condizione
virtual TObject* last_that( CONDITION_FUNCTION = NULL );
// @cmember Ritorna il prossimo oggetto che soddisfa la condizione. Va usata con first_that per scandire il container
virtual TObject* succ_that( );
// @cmember Ritorna il precedente oggetto che soddisfa la condizione. Va usata con last_that per scandire il container all'indietro
virtual TObject* pred_that( );
// @cmember Ritorna il numero di elementi che soddisfano la condizione
virtual long count( CONDITION_FUNCTION = NULL );
// @cmember Ritorna l'oggetto successivo a quello corrente
TObject* operator++ ()
{ return succ_item( ); }
// @cmember Ritorna l'oggetto che precede quello corrente
TObject* operator-- ()
{ return pred_item( ); }
virtual ~TContainer() { }
};
// @doc EXTERNAL
// @class TArray | Classe per la definizione degli array
//
// @base public | TContainer
class TArray : public TContainer
// @author:(INTERNAL) Guido
// @access:(INTERNAL) Private Member
{
friend class TPointer_array;
// @cmember:(INTERNAL) Array di puntatori ad oggetti
TObject** _data;
// @cmember:(INTERNAL) Dimensione dell'array
int _size;
// @cmember:(INTERNAL) Numero di elementi presenti nell'array
int _items;
// @cmember:(INTERNAL) Prossimo elemento libero nell'array
int _next;
// @cmember:(INTERNAL) Indice per la scansione sequenziale
int _scanindex;
// @access Protected Member
protected:
TObject** data() const { return _data; }
// @cmember Modifica la dimensione dell'array.
void resize(int newdim);
void copy(const TArray& a);
// @access Public Member
public:
// @cmember Costruttore. Crea un array (chiama <mf TArray::resize>)
TArray(int arraysize);
// @cmember Costruttore. Crea un array (non chiama <mf TArray::resize>)
TArray();
// @cmember Costruttore. Copia tutto l'array e ne duplica gli elementi
TArray(const TArray&);
// @cmember Distruttore
virtual ~TArray() ;
// @cmember Ritorna il nome della classe
virtual const char* class_name() const ;
// @cmember Ritorna l'id della class
virtual word class_id() const ;
// @cmember Stampa un array
virtual void print_on(ostream& out) const ;
// @cmember Controlla se si tratta di un oggetto valido
virtual bool ok() const ;
// @cmember Ritorna la grandezza dell'array
int size() const
{ return _size; }
// @cmember Ritorna numero di oggetti nell'array
virtual long objects( ) const
{ return _items; }
// @cmember Ritorna numero di oggetti nell'array
virtual int items() const
{ return _items; }
// @cmember Ritorna il primo elemento dell'array
virtual TObject* first_item( );
// @cmember Ritorna l'ultimo elemento dell'array
virtual TObject* last_item( );
// @cmember Ritorna il successivo elemento dell'array rispetto all'elemento corrente
virtual TObject* succ_item( );
// @cmember Ritorna il precedente elemento dell'array rispetto all'elemento corrente
virtual TObject* pred_item( );
// @cmember Ritorna l'indice del primo oggetto
int first() const;
// @cmember Ritorna l'indice dell'ultimo oggetto
int last() const;
// @cmember Ritorna l'indice del primo oggetto dopo l'i-esimo
int succ(int i) const;
// @cmember Ritorna l'indice del primo oggetto che precede l'i-esimo
int pred(int i) const;
// @cmember Ritorna l'oggetto nella posizione index
TObject& operator[] (int index) const ;
// @cmember Ritorna l'oggetto nella posizione index
TObject* objptr(int index) const ;
// @cmember Assegna all'array l'oggetto passato
TArray& operator=(const TArray& a);
// @cmember Rimuove uno o tutti (default) gli elementi
virtual bool destroy(int index = -1, bool pack = false);
// @cmember Aggiunge un oggetto ad un array.
virtual int add(TObject* obj, int index = -1) ;
// @cmember Inserisce un elemento dell'array nella posizione index
virtual int insert(TObject* obj, int index = 0, bool force = false);
// @cmember Aggiunge un oggetto all'array. L'oggetto viene duplicato
virtual int add(const TObject& object, int index = -1) ;
// @cmember Inserisce un oggetto alla posizione index
virtual int insert(const TObject& object, int index = 0, bool force = false);
// @cmember Elimina l'elemento nella posizione index dell'array
TObject* remove(int index, bool pack = false);
// @cmember Elimina l'elemento nella posizione index dell'array
TObject* remove_item(bool pack = false) ;
// @cmember Scambia di posto due elementi dell'array
void swap(int i1, int i2);
// @cmember Rende contigui tutti gli elementi non nulli
virtual void pack();
// @cmember Ordina i TObject secondo il criterio definito in <t COMPARE_FUNCTION>
void sort(COMPARE_FUNCTION = NULL);
};
inline TObject* TArray::objptr(int index) const
{ return (index < _size && index >= 0) ? _data[index] : NULL; }
#ifndef DBG
inline TObject& TArray::operator[] (int index) const
{ return *objptr(index); }
#endif
#define FOR_EACH_ARRAY_ITEM(__arr, __r, __obj) \
TObject* __obj; \
for (int __r = (__arr).first(); \
(__obj = (__arr).objptr(__r)); \
__r = (__arr).succ(__r))
#define FOR_EACH_ARRAY_ITEM_BACK(__arr, __r, __obj) \
TObject* __obj; \
for (int __r = (__arr).last(); \
(__obj = (__arr).objptr(__r)); \
__r = (__arr).pred(__r))
class TPointer_array : public TArray
{
protected:
void copy(const TArray& a);
public:
virtual bool destroy(int index = -1, bool pack = false);
virtual int add(TObject* object, int index = -1);
virtual int add(const TObject& object, int index = -1);
virtual int insert(const TObject& object, int index = 0, bool force = false);
virtual TPointer_array& operator= (const TArray& a) { copy(a); return *this; }
virtual TPointer_array& operator= (const TPointer_array& a) { copy(a); return *this; }
long get_long(int index) const { return (long)objptr(index); }
int get_int(int index) const { return (int)get_long(index); }
int add_long(long value, int index = -1) { return add((TObject*)value, index); }
int insert_long(long value, int index = -1) { return TArray::insert((TObject*)value, index, true); }
int find_long(long value) const;
TPointer_array() { }
TPointer_array(int size) : TArray(size) { }
TPointer_array(const TArray& a) { copy(a); }
TPointer_array(const TPointer_array& a) { copy(a); }
virtual ~TPointer_array() { destroy(); }
};
// @doc EXTERNAL
// @class TBit_array | Come la classe <c TArray> ma i suoi elementi sono bit;
// questo permette di costruire array piu' piccoli rispetto
// alla classe TArray.
//
// @base public | TObject
class TBit_array : public TObject
// @author:(INTERNAL) Guido
// @access:(INTERNAL) Private Member
{
// @cmember:(INTERNAL) dimensione dell'array
word _size;
// @cmember:(INTERNAL) bit in cui sono contenuti i dati
byte* _bit;
// @access Protected Member
protected:
// @cmember Controlla se si tratta di un oggetto valido
virtual bool ok() const;
// @cmember Stampa un array
virtual void print_on(ostream& out) const;
// @cmember Modifica la dimensione dell'array.
void resize(word size);
// @cmember Copia nell'array l'elemento passato come parametro
void copy(const TBit_array& ba);
// @cmember Ritorna il numero del byte contenente il bit <p n>
word index(long n) const
{ return word(n >> 3); }
// @cmember Ritorna la posizione del bit <p n> all'interno del byte
byte mask(long n) const
{ return byte(1 << (n & 0x7)); }
// @access Public Member
public:
// @cmember Costruttore. Crea un array di (chiama <mf TBit_array::resize>)
TBit_array(long size = 0);
// @cmember Costruttore. Crea un array di (chiama <mf TBit_array::copy>)
TBit_array(const TBit_array& ba);
// @cmember Distruttore
virtual ~TBit_array();
// @cmember Assegna all'array l'oggetto passato
TBit_array& operator=(const TBit_array& ba);
// @cmember Ritorna l'oggetto puntato da n
bool operator[] (long n) const;
// @cmember Ritorna l'or logico tra due Bit_array modificando l'oggetto corrente
TBit_array& operator |=(const TBit_array& b);
// @cmember Ritorna il numero di bit nell'array
long items() const { return 8L * _size; }
// @cmember Ritorna la posizione del primo 1 nell'array (-1 se non lo trova)
long first_one() const;
// @cmember Ritorna la posizione dell'ultimo 1 nell'array (-1 se non lo trova)
long last_one() const;
// @cmember Ritorna il numero di 1 presenti nell'array
long ones() const;
// @cmember C'<27> almeno un 1
bool some_one() const;
// @cmember Setta ad 1 il bit n-esimo dell'array
void set(long n);
// @cmember Setta a 0 il bit n-esimo dell'array
void reset(long n);
// @cmember Not logico del bit n-esimo dell'array
void neg(long n);
// @cmember Setta il bit n-esimo a seconda del valore passato come secondo elemento
void set(long n, bool on) { on ? set(n) : reset(n); }
// @cmember Setta ad 1 tutti i bit dell'array
void set();
// @cmember Setta a 0 tutti i bit dell'array
void reset();
// @cmember Data una stringa setta ad 1 gli elementi indicati della stringa
void set(const char* numbers);
// @cmember Data una stringa setta a 0 gli elementi indicati della stringa
void reset(const char* numbers);
};
#endif