Patch level : 12.0 no-patch
Files correlati : Commento : Aggiunta merge e merge_token per le string_array Aggiunta compare_token per le token string
This commit is contained in:
parent
d436986337
commit
864436700f
@ -159,7 +159,8 @@ bool TArray::destroy(
|
|||||||
|
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
{
|
{
|
||||||
for (int i = last(); i >= 0; i--) if (_data[i] != nullptr)
|
for (int i = last(); i >= 0; i--)
|
||||||
|
if (_data[i] != NULL)
|
||||||
safe_delete(_data[i]);
|
safe_delete(_data[i]);
|
||||||
_items = _next = 0;
|
_items = _next = 0;
|
||||||
}
|
}
|
||||||
@ -649,23 +650,20 @@ int TString_array::find(
|
|||||||
}
|
}
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
HIDDEN int ascending_string(const TObject** o1, const TObject** o2)
|
HIDDEN int ascending_string(const TObject** o1, const TObject** o2)
|
||||||
{
|
|
||||||
if (((const TToken_string*)*o1)->items() > 1)
|
|
||||||
{
|
|
||||||
const TToken_string* s1 = (const TToken_string*)*o1;
|
|
||||||
const TToken_string* s2 = (const TToken_string*)*o2;
|
|
||||||
|
|
||||||
return s1->compare(*s2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HIDDEN int ascending_token(const TObject** o1, const TObject** o2)
|
||||||
|
{
|
||||||
|
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)
|
||||||
@ -673,11 +671,21 @@ HIDDEN int descending_string(const TObject** o1, const TObject** o2)
|
|||||||
return -ascending_string(o1, o2);
|
return -ascending_string(o1, o2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HIDDEN int descending_token(const TObject** o1, const TObject** o2)
|
||||||
|
{
|
||||||
|
return -ascending_token(o1, o2);
|
||||||
|
}
|
||||||
|
|
||||||
void TString_array::sort(bool ascending)
|
void TString_array::sort(bool ascending)
|
||||||
{
|
{
|
||||||
TArray::sort(ascending ? ascending_string : descending_string);
|
TArray::sort(ascending ? ascending_string : descending_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TString_array::sort_token(bool ascending)
|
||||||
|
{
|
||||||
|
TArray::sort(ascending ? ascending_token : descending_token);
|
||||||
|
}
|
||||||
|
|
||||||
const TString_array & TString_array::merge(const TString_array & a)
|
const TString_array & TString_array::merge(const TString_array & a)
|
||||||
{
|
{
|
||||||
FOR_EACH_ARRAY_ROW(a, i, row)
|
FOR_EACH_ARRAY_ROW(a, i, row)
|
||||||
@ -687,6 +695,15 @@ const TString_array & TString_array::merge(const TString_array & a)
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const TString_array & TString_array::merge_token(const TString_array & a)
|
||||||
|
{
|
||||||
|
FOR_EACH_ARRAY_ROW(a, i, row)
|
||||||
|
if (find(*row) == -1)
|
||||||
|
add(*row);
|
||||||
|
sort_token(true);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
const TString_array & TString_array::tok2arr(TToken_string & tok, bool clear)
|
const TString_array & TString_array::tok2arr(TToken_string & tok, bool clear)
|
||||||
{
|
{
|
||||||
if (clear)
|
if (clear)
|
||||||
|
@ -202,7 +202,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
inline TObject* TArray::objptr(int index) const
|
inline TObject* TArray::objptr(int index) const
|
||||||
{ return (index < _size && index >= 0) ? _data[index] : NULL; }
|
{ return (index < _size && index >= 0) ? _data[index] : nullptr; }
|
||||||
|
|
||||||
#ifndef DBG
|
#ifndef DBG
|
||||||
inline TObject& TArray::operator[] (int index) const
|
inline TObject& TArray::operator[] (int index) const
|
||||||
@ -264,8 +264,12 @@ public:
|
|||||||
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 ascending = true);
|
void sort(bool ascending = true);
|
||||||
|
// @cmember Ordina alfabeticamente l'array come token_string
|
||||||
|
void sort_token(bool ascending = true);
|
||||||
// @cmember fonde con l'array a
|
// @cmember fonde con l'array a
|
||||||
const TString_array & merge(const TString_array & a);
|
const TString_array & merge(const TString_array & a);
|
||||||
|
// @cmember fonde con l'array a
|
||||||
|
const TString_array & merge_token(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()); }
|
||||||
|
@ -2038,7 +2038,7 @@ TToken_string& TToken_string::pack()
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TToken_string::compare(const char* s, int max, bool ignorecase) const
|
int TToken_string::compare_token(const char* s, int max, bool ignorecase) const
|
||||||
{
|
{
|
||||||
if (items() > 1)
|
if (items() > 1)
|
||||||
{
|
{
|
||||||
@ -2200,7 +2200,7 @@ TToken_string& get_tmp_string(int len)
|
|||||||
|
|
||||||
TToken_string* str = (TToken_string*)ararar.objptr(next);
|
TToken_string* str = (TToken_string*)ararar.objptr(next);
|
||||||
|
|
||||||
if (str == NULL)
|
if (str == nullptr)
|
||||||
{
|
{
|
||||||
str = new TToken_string(max(len,50));
|
str = new TToken_string(max(len,50));
|
||||||
ararar.add(str, next);
|
ararar.add(str, next);
|
||||||
|
@ -294,7 +294,7 @@ public:
|
|||||||
// @cmember Confronta usando le regular expression
|
// @cmember Confronta usando le regular expression
|
||||||
bool match(const char* pat, bool ignorecase = false) const;
|
bool match(const char* pat, bool ignorecase = false) const;
|
||||||
// @cmember Compara due stringhe (o i primi max caratteri)
|
// @cmember Compara due stringhe (o i primi max caratteri)
|
||||||
virtual int compare(const char* s, int max = -1, bool ignorecase = false) const;
|
int compare(const char* s, int max = -1, bool ignorecase = false) const;
|
||||||
// @cmember Controlla se la stringa comincia per s
|
// @cmember Controlla se la stringa comincia per s
|
||||||
bool starts_with(const char* s, bool ignorecase = false) const;
|
bool starts_with(const char* s, bool ignorecase = false) const;
|
||||||
// @cmember Controlla se la stringa finisce per s
|
// @cmember Controlla se la stringa finisce per s
|
||||||
@ -739,7 +739,7 @@ public:
|
|||||||
// @cmember Compatta tutti i campi " " in ""
|
// @cmember Compatta tutti i campi " " in ""
|
||||||
TToken_string& pack();
|
TToken_string& pack();
|
||||||
// @cmenmber compara 2 Token_string elemento per elemento come stringhe
|
// @cmenmber compara 2 Token_string elemento per elemento come stringhe
|
||||||
virtual int compare(const char* s, int max = -1, bool ignorecase = false) const;
|
int compare_token(const char* s, int max = -1, bool ignorecase = false) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define FOR_EACH_TOKEN(__tok, __str) \
|
#define FOR_EACH_TOKEN(__tok, __str) \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user