Patch level : 12.0 no-patch
Files correlati : Commento : Aggiunta merge per le string_array
This commit is contained in:
parent
3fe4a81466
commit
94c6ecf100
@ -1,5 +1,6 @@
|
||||
#include <array.h>
|
||||
#include <strings.h>
|
||||
#include <utility.h>
|
||||
|
||||
void TContainer::for_each( OPERATION_FUNCTION op )
|
||||
{
|
||||
@ -158,11 +159,8 @@ bool TArray::destroy(
|
||||
|
||||
if (index < 0)
|
||||
{
|
||||
for (int i = last(); i >= 0; i--) if (_data[i] != NULL)
|
||||
{
|
||||
delete _data[i];
|
||||
_data[i] = NULL;
|
||||
}
|
||||
for (int i = last(); i >= 0; i--) if (_data[i] != nullptr)
|
||||
safe_delete(_data[i]);
|
||||
_items = _next = 0;
|
||||
}
|
||||
else
|
||||
@ -182,7 +180,8 @@ void TArray::copy(const TArray& a)
|
||||
for (int i = a.size()-1; i >= 0; i--)
|
||||
{
|
||||
const TObject* o = a.objptr(i);
|
||||
if (o != NULL)
|
||||
|
||||
if (o != nullptr)
|
||||
{
|
||||
_data[i] = o->dup();
|
||||
#ifdef DBG
|
||||
@ -653,9 +652,13 @@ int TString_array::find(
|
||||
|
||||
HIDDEN int ascending_string(const TObject** o1, const TObject** o2)
|
||||
{
|
||||
const TString* s1 = (const TString*)*o1;
|
||||
const TString* s2 = (const TString*)*o2;
|
||||
return strcmp(*s1, *s2);
|
||||
// const TString* s1 = (const TString*)*o1;
|
||||
// const TString* s2 = (const TString*)*o2;
|
||||
// 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)
|
||||
@ -668,6 +671,34 @@ void TString_array::sort(bool ascending)
|
||||
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
|
||||
///////////////////////////////////////////////////////////
|
||||
|
@ -1,4 +1,3 @@
|
||||
#pragma once
|
||||
#ifndef __ARRAY_H
|
||||
#define __ARRAY_H
|
||||
|
||||
@ -136,7 +135,7 @@ public:
|
||||
// @cmember Ritorna l'id della class
|
||||
virtual word class_id() const ;
|
||||
// @cmember Controlla se si tratta di un oggetto derivato da TArray
|
||||
virtual bool is_kind_of(word cid) const;
|
||||
virtual bool is_kind_of(word cid) const;
|
||||
// @cmember Stampa un array
|
||||
virtual void print_on(ostream& out) const ;
|
||||
// @cmember Controlla se si tratta di un oggetto valido
|
||||
@ -174,7 +173,7 @@ public:
|
||||
// @cmember Ritorna l'oggetto nella posizione index
|
||||
TObject& operator[] (int index) const ;
|
||||
// @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
|
||||
TArray& operator=(const TArray& a);
|
||||
|
||||
@ -264,10 +263,16 @@ public:
|
||||
// @cmember Cerca una stringa nell'array
|
||||
int find(const char* s, int from = 0) const;
|
||||
// @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!)
|
||||
TToken_string& last_row()
|
||||
{ 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
|
||||
TString_array(int size = 8) : TArray(size)
|
||||
|
Loading…
x
Reference in New Issue
Block a user