Patch level : 12.0 no-patch

Files correlati     :
Commento            :

Aggiunta merge per le string_array
This commit is contained in:
Alessandro Bonazzi 2020-10-15 08:22:59 +02:00
parent 3fe4a81466
commit 94c6ecf100
2 changed files with 49 additions and 13 deletions

View File

@ -1,5 +1,6 @@
#include <array.h> #include <array.h>
#include <strings.h> #include <strings.h>
#include <utility.h>
void TContainer::for_each( OPERATION_FUNCTION op ) void TContainer::for_each( OPERATION_FUNCTION op )
{ {
@ -158,11 +159,8 @@ bool TArray::destroy(
if (index < 0) if (index < 0)
{ {
for (int i = last(); i >= 0; i--) if (_data[i] != NULL) for (int i = last(); i >= 0; i--) if (_data[i] != nullptr)
{ safe_delete(_data[i]);
delete _data[i];
_data[i] = NULL;
}
_items = _next = 0; _items = _next = 0;
} }
else else
@ -182,7 +180,8 @@ void TArray::copy(const TArray& a)
for (int i = a.size()-1; i >= 0; i--) for (int i = a.size()-1; i >= 0; i--)
{ {
const TObject* o = a.objptr(i); const TObject* o = a.objptr(i);
if (o != NULL)
if (o != nullptr)
{ {
_data[i] = o->dup(); _data[i] = o->dup();
#ifdef DBG #ifdef DBG
@ -653,9 +652,13 @@ int TString_array::find(
HIDDEN int ascending_string(const TObject** o1, const TObject** o2) HIDDEN int ascending_string(const TObject** o1, const TObject** o2)
{ {
const TString* s1 = (const TString*)*o1; // const TString* s1 = (const TString*)*o1;
const TString* s2 = (const TString*)*o2; // const TString* s2 = (const TString*)*o2;
return strcmp(*s1, *s2); // return strcmp(*s1, *s2);
const TToken_string* s1 = (const TToken_string*)*o1;
const TToken_string* s2 = (const TToken_string*)*o2;
return s1->compare(*s2);
} }
HIDDEN int descending_string(const TObject** o1, const TObject** o2) HIDDEN int descending_string(const TObject** o1, const TObject** o2)
@ -668,6 +671,34 @@ void TString_array::sort(bool ascending)
TArray::sort(ascending ? ascending_string : descending_string); TArray::sort(ascending ? ascending_string : descending_string);
} }
const TString_array & TString_array::merge(const TString_array & a)
{
FOR_EACH_ARRAY_ROW(a, i, row)
if (find(*row) == -1)
add(*row);
sort(true);
return *this;
}
const TString_array & TString_array::tok2arr(TToken_string & tok, bool clear)
{
if (clear)
destroy();
FOR_EACH_STR_TOKEN(tok, s)
add(s);
return *this;
}
// @cmember aggiunge (add = true) / sostituisce (add = false) la token string all' array come stringhe singole
const TString_array & TString_array::arr2tok(TToken_string & tok, bool clear)
{
if (clear)
tok.cut(0);
FOR_EACH_ARRAY_ROW(*this, i, riga)
tok.add(*riga);
return *this;
}
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TPointer_array // TPointer_array
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////

View File

@ -1,4 +1,3 @@
#pragma once
#ifndef __ARRAY_H #ifndef __ARRAY_H
#define __ARRAY_H #define __ARRAY_H
@ -174,7 +173,7 @@ public:
// @cmember Ritorna l'oggetto nella posizione index // @cmember Ritorna l'oggetto nella posizione index
TObject& operator[] (int index) const ; TObject& operator[] (int index) const ;
// @cmember Ritorna l'oggetto nella posizione index // @cmember Ritorna l'oggetto nella posizione index
TObject* objptr(int index) const ; virtual TObject* objptr(int index) const ;
// @cmember Assegna all'array l'oggetto passato // @cmember Assegna all'array l'oggetto passato
TArray& operator=(const TArray& a); TArray& operator=(const TArray& a);
@ -264,10 +263,16 @@ public:
// @cmember Cerca una stringa nell'array // @cmember Cerca una stringa nell'array
int find(const char* s, int from = 0) const; int find(const char* s, int from = 0) const;
// @cmember Ordina alfabeticamente l'array // @cmember Ordina alfabeticamente l'array
void sort(bool ascendig = true); void sort(bool ascending = true);
// @cmember fonde con l'array a
const TString_array & merge(const TString_array & a);
// @cmember Ritorna l'ultima riga (deve esistere!) // @cmember Ritorna l'ultima riga (deve esistere!)
TToken_string& last_row() TToken_string& last_row()
{ return (TToken_string&)operator[](last()); } { return (TToken_string&)operator[](last()); }
// @cmember aggiunge (add = true) la token string all' array come stringhe singole azzerandola prima (clear)
const TString_array & tok2arr(TToken_string & tok, bool clear = true);
// @cmember aggiunge (add = true) / sostituisce (add = false) la token string all' array v
const TString_array & arr2tok(TToken_string & tok, bool clear = true);
// @cmember Costruttore // @cmember Costruttore
TString_array(int size = 8) : TArray(size) TString_array(int size = 8) : TArray(size)