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:
guy 2005-07-07 17:07:13 +00:00
parent 1cf194aed9
commit 16276b72a7
3 changed files with 25 additions and 19 deletions

@ -179,7 +179,7 @@ void TDate::set_year(int n)
TDate::operator const char*() const
{
return string();
return stringa();
}
TDate& TDate::operator =(const char* s)
@ -189,7 +189,7 @@ TDate& TDate::operator =(const char* s)
TDate& TDate::operator =(long val)
{
if (val < 0L)
if (val < 0L) // TODAY
*this = TDate(val);
else
_val = val;
@ -198,7 +198,7 @@ TDate& TDate::operator =(long val)
void TDate::print_on(ostream& out) const
{
out << string();
out << stringa();
}
void TDate::read_from(istream& in)
@ -215,6 +215,16 @@ TObject* TDate::dup() const
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
// @mfunc Ritorna la data in formato di stringa (anche in formato ANSI)
@ -232,11 +242,11 @@ char* TDate::string(
if (!ok() || *this == botime)
return "";
TString& dfm = get_tmp_string(80);
if (yearf == ANSI)
{
yearf = full;
ord = amg_date;
sep='\0';
dfm.format("%08ld", _val);
return dfm.get_buffer();
}
TString80 df, yf, mf;
@ -288,9 +298,6 @@ char* TDate::string(
sep = ' ';
// build date string
TString& dfm = get_tmp_string(80);
switch (ord)
{
case mga_date:

@ -72,6 +72,8 @@ public:
virtual TObject* dup() const;
// @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 ;
// @cmember Ritorna la data in formato gg-mm-aaaa
const char* stringa() const ;
// @cmember Ritorna la data come numero giuliano
long date2julian() const;
// @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)
{
int len, i;
CHECK(recout, "Can't write null record" );
char s2[40];
if (t == _datefld)
{
if (*s)
if (s && *s && strlen(s) != 8)
{
const TDate dt(s);
strcpy(s2, dt.string(ANSI));
sprintf(s2, "%ld", dt.date2ansi());
s = s2;
}
}
@ -237,8 +234,7 @@ void __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout)
s = s2;
}
len = strlen(s);
int len = strlen(s);
const bool exceeded = len > l;
if ((t == _intfld) ||
@ -258,7 +254,7 @@ void __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout)
__field_changed = FALSE;
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);
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'
strncpy(recout, s, len) ;
for (i = l - 1; i >= len; i--)
for (int i = l - 1; i >= len; 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)
{
put_str( fieldname, val.string(full));
// put_str( fieldname, val.string(full));
put( fieldname, val.date2ansi());
}
void TRectype::put(const char* fieldname, char val)