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

View File

@ -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:

View File

@ -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

View File

@ -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)