diff --git a/include/assoc.cpp b/include/assoc.cpp index bc7827f8b..6004a4ea2 100755 --- a/include/assoc.cpp +++ b/include/assoc.cpp @@ -322,3 +322,34 @@ int TAssoc_array::get_keys(TString_array& kl, bool add_values) restart(); return kl.items(); } + +HIDDEN TAssoc_array * _new_assoc_array = NULL; + + +// @doc INTERNAL + +// @mfunc funzione per duplicare il contenuto di un assoc_array +// +HIDDEN void copia_elemento(const TObject & o) + +{ + const THash_object & h = (const THash_object & ) o; + + _new_assoc_array->add(h.key(), h.obj(), TRUE); +} + +// @doc INTERNAL + +// @mfunc Copia tutto l'array e ne duplica gli elementi +// +TAssoc_array & TAssoc_array::copy( + const TAssoc_array & a) // @parm Array associativo sorgente + +{ + CHECK(_new_assoc_array == NULL, "Trying to duplicate an assoc array while another copy is in progress"); + _new_assoc_array = this; + ((TAssoc_array &)a).for_each(copia_elemento); + _new_assoc_array = NULL; + return * this; +} + diff --git a/include/assoc.h b/include/assoc.h index d386ebe37..49790033d 100755 --- a/include/assoc.h +++ b/include/assoc.h @@ -74,7 +74,9 @@ class TAssoc_array : public TContainer protected: // @cmember Cerca l'oggetto con chiave k - THash_object* _lookup(const char* k, bool& isnew, bool insert = FALSE); + THash_object* _lookup(const char* k, bool& isnew, bool insert = FALSE); + // @cmember Copia tutto l'array associativo e ne duplica gli elementi + TAssoc_array & copy(const TAssoc_array & a); // @access Public Member public: @@ -134,10 +136,16 @@ public: // @cmember Mette chiavi e opzionalmente valori (come stringa) nel passato int get_keys(TString_array& kl, bool add_values = FALSE); - + // @cmember Operatore di assegnamento tra array associativi + TAssoc_array & operator= (const TAssoc_array & a) + { return copy(a); } + // @cmember Costruttore TAssoc_array() : _cnt(0), _row(0), _col(0) {} + // @cmember Costruttore. Copia tutto l'array associativo e ne duplica gli elementi + TAssoc_array(const TAssoc_array & a) : _cnt(0), _row(0), _col(0) + { copy(a); } // @cmember Distruttore virtual ~TAssoc_array() { destroy(); }