Patch level : 2.2
Files correlati : Ricompilazione Demo : [ ] Commento : Velocizzata gestione conversioni in stringa delle date. Elininate un paio di conversioni da stringa a numero e viceversa durante ogni singola put su record git-svn-id: svn://10.65.10.50/trunk@13266 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
1cf194aed9
commit
16276b72a7
@ -179,7 +179,7 @@ void TDate::set_year(int n)
|
|||||||
|
|
||||||
TDate::operator const char*() const
|
TDate::operator const char*() const
|
||||||
{
|
{
|
||||||
return string();
|
return stringa();
|
||||||
}
|
}
|
||||||
|
|
||||||
TDate& TDate::operator =(const char* s)
|
TDate& TDate::operator =(const char* s)
|
||||||
@ -189,7 +189,7 @@ TDate& TDate::operator =(const char* s)
|
|||||||
|
|
||||||
TDate& TDate::operator =(long val)
|
TDate& TDate::operator =(long val)
|
||||||
{
|
{
|
||||||
if (val < 0L)
|
if (val < 0L) // TODAY
|
||||||
*this = TDate(val);
|
*this = TDate(val);
|
||||||
else
|
else
|
||||||
_val = val;
|
_val = val;
|
||||||
@ -198,7 +198,7 @@ TDate& TDate::operator =(long val)
|
|||||||
|
|
||||||
void TDate::print_on(ostream& out) const
|
void TDate::print_on(ostream& out) const
|
||||||
{
|
{
|
||||||
out << string();
|
out << stringa();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TDate::read_from(istream& in)
|
void TDate::read_from(istream& in)
|
||||||
@ -215,6 +215,16 @@ TObject* TDate::dup() const
|
|||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* TDate::stringa() const
|
||||||
|
{
|
||||||
|
if (_val <= 0)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
TString& dfm = get_tmp_string(10);
|
||||||
|
dfm.format("%02d-%02d-%04d", day(), month(), year());
|
||||||
|
return dfm;
|
||||||
|
}
|
||||||
|
|
||||||
// @doc EXTERNAL
|
// @doc EXTERNAL
|
||||||
|
|
||||||
// @mfunc Ritorna la data in formato di stringa (anche in formato ANSI)
|
// @mfunc Ritorna la data in formato di stringa (anche in formato ANSI)
|
||||||
@ -232,11 +242,11 @@ char* TDate::string(
|
|||||||
if (!ok() || *this == botime)
|
if (!ok() || *this == botime)
|
||||||
return "";
|
return "";
|
||||||
|
|
||||||
|
TString& dfm = get_tmp_string(80);
|
||||||
if (yearf == ANSI)
|
if (yearf == ANSI)
|
||||||
{
|
{
|
||||||
yearf = full;
|
dfm.format("%08ld", _val);
|
||||||
ord = amg_date;
|
return dfm.get_buffer();
|
||||||
sep='\0';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TString80 df, yf, mf;
|
TString80 df, yf, mf;
|
||||||
@ -288,9 +298,6 @@ char* TDate::string(
|
|||||||
sep = ' ';
|
sep = ' ';
|
||||||
|
|
||||||
// build date string
|
// build date string
|
||||||
|
|
||||||
TString& dfm = get_tmp_string(80);
|
|
||||||
|
|
||||||
switch (ord)
|
switch (ord)
|
||||||
{
|
{
|
||||||
case mga_date:
|
case mga_date:
|
||||||
|
@ -72,6 +72,8 @@ public:
|
|||||||
virtual TObject* dup() const;
|
virtual TObject* dup() const;
|
||||||
// @cmember Ritorna la data in formato di stringa (anche in formato ANSI)
|
// @cmember Ritorna la data in formato di stringa (anche in formato ANSI)
|
||||||
char* string(TDate_mgafmt year = full, char sep = '-', TDate_mgafmt day = full, TDate_mgafmt month = full, TDate_order ord = gma_date) const ;
|
char* string(TDate_mgafmt year = full, char sep = '-', TDate_mgafmt day = full, TDate_mgafmt month = full, TDate_order ord = gma_date) const ;
|
||||||
|
// @cmember Ritorna la data in formato gg-mm-aaaa
|
||||||
|
const char* stringa() const ;
|
||||||
// @cmember Ritorna la data come numero giuliano
|
// @cmember Ritorna la data come numero giuliano
|
||||||
long date2julian() const;
|
long date2julian() const;
|
||||||
// @cmember Trasforma un numero giuliano in data ANSI
|
// @cmember Trasforma un numero giuliano in data ANSI
|
||||||
|
@ -208,18 +208,15 @@ void __getfieldbuff(byte l, byte t, const char * recin, char *s)
|
|||||||
|
|
||||||
void __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout)
|
void __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout)
|
||||||
{
|
{
|
||||||
int len, i;
|
|
||||||
|
|
||||||
CHECK(recout, "Can't write null record" );
|
CHECK(recout, "Can't write null record" );
|
||||||
|
|
||||||
char s2[40];
|
char s2[40];
|
||||||
|
|
||||||
if (t == _datefld)
|
if (t == _datefld)
|
||||||
{
|
{
|
||||||
if (*s)
|
if (s && *s && strlen(s) != 8)
|
||||||
{
|
{
|
||||||
const TDate dt(s);
|
const TDate dt(s);
|
||||||
strcpy(s2, dt.string(ANSI));
|
sprintf(s2, "%ld", dt.date2ansi());
|
||||||
s = s2;
|
s = s2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -237,8 +234,7 @@ void __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout)
|
|||||||
s = s2;
|
s = s2;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = strlen(s);
|
int len = strlen(s);
|
||||||
|
|
||||||
const bool exceeded = len > l;
|
const bool exceeded = len > l;
|
||||||
|
|
||||||
if ((t == _intfld) ||
|
if ((t == _intfld) ||
|
||||||
@ -258,7 +254,7 @@ void __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout)
|
|||||||
|
|
||||||
__field_changed = FALSE;
|
__field_changed = FALSE;
|
||||||
const char c = (t == _intzerofld || t == _longzerofld) ? '0' : ' ';
|
const char c = (t == _intzerofld || t == _longzerofld) ? '0' : ' ';
|
||||||
for (i = l - len - 1; i >= 0; i--)
|
for (int i = l - len - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
__field_changed |= (recout[i] != c);
|
__field_changed |= (recout[i] != c);
|
||||||
recout[i] = c;
|
recout[i] = c;
|
||||||
@ -288,7 +284,7 @@ void __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout)
|
|||||||
__field_changed = TRUE; // Per ora e' meglio cosi'
|
__field_changed = TRUE; // Per ora e' meglio cosi'
|
||||||
|
|
||||||
strncpy(recout, s, len) ;
|
strncpy(recout, s, len) ;
|
||||||
for (i = l - 1; i >= len; i--)
|
for (int i = l - 1; i >= len; i--)
|
||||||
recout[i] = ' ';
|
recout[i] = ' ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3287,7 +3283,8 @@ void TRectype::put(const char* fieldname, const TCurrency& val)
|
|||||||
|
|
||||||
void TRectype::put(const char* fieldname, const TDate& val)
|
void TRectype::put(const char* fieldname, const TDate& val)
|
||||||
{
|
{
|
||||||
put_str( fieldname, val.string(full));
|
// put_str( fieldname, val.string(full));
|
||||||
|
put( fieldname, val.date2ansi());
|
||||||
}
|
}
|
||||||
|
|
||||||
void TRectype::put(const char* fieldname, char val)
|
void TRectype::put(const char* fieldname, char val)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user