Nuova derivazione delle classi per la gestione del codice a livelli
git-svn-id: svn://10.65.10.50/trunk@4824 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
bddad2042b
commit
6a17722244
275
mg/mglib01.cpp
275
mg/mglib01.cpp
@ -9,102 +9,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// **************************
|
|
||||||
// classe livelli giacenze
|
|
||||||
TMag_livelli:: TMag_livelli(const char *tabname)
|
|
||||||
{
|
|
||||||
TTable _tabformato(tabname);
|
|
||||||
int e;
|
|
||||||
|
|
||||||
_last_level=0;
|
|
||||||
e=_tabformato.first();
|
|
||||||
for (int i=0; i< MANY_MAG_LEV; i++) {
|
|
||||||
_enabled[i]=(e==NOERR);
|
|
||||||
if (_enabled[i]) {
|
|
||||||
_name[i]=_tabformato.get("S0");
|
|
||||||
_code_lenght[i]=atoi(_tabformato.get("I0"));
|
|
||||||
_picture[i]=_tabformato.get("S1");
|
|
||||||
_last_level=i+1;
|
|
||||||
} else {
|
|
||||||
_name[i]="";
|
|
||||||
_code_lenght[i]=0;
|
|
||||||
_picture[i]="";
|
|
||||||
}
|
|
||||||
e=_tabformato.next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const bool TMag_livelli::enabled(int levnum)
|
|
||||||
{
|
|
||||||
if (levnum<=MANY_MAG_LEV && levnum>0)
|
|
||||||
return(_enabled[levnum-1]);
|
|
||||||
else
|
|
||||||
return(FALSE) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
const int TMag_livelli::code_lenght(int levnum)
|
|
||||||
{
|
|
||||||
if (levnum<=MANY_MAG_LEV && levnum>0)
|
|
||||||
return(_code_lenght[levnum-1]);
|
|
||||||
else
|
|
||||||
return(0) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
const int TMag_livelli::packed_lenght(int levnum)
|
|
||||||
{
|
|
||||||
int start=0;
|
|
||||||
for (int i=1; i<=levnum && levnum<=MANY_MAG_LEV; i++)
|
|
||||||
start+= _code_lenght[i-1];
|
|
||||||
return start;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const TString & TMag_livelli::name(int levnum)
|
|
||||||
{
|
|
||||||
if (levnum<=MANY_MAG_LEV && levnum>0)
|
|
||||||
return(_name[levnum-1]);
|
|
||||||
else
|
|
||||||
return("");
|
|
||||||
}
|
|
||||||
|
|
||||||
const TString & TMag_livelli::picture(int levnum)
|
|
||||||
{
|
|
||||||
if (levnum<=MANY_MAG_LEV && levnum>0)
|
|
||||||
return(_picture[levnum-1]);
|
|
||||||
else
|
|
||||||
return("");
|
|
||||||
}
|
|
||||||
|
|
||||||
void TMag_livelli::pack_grpcode(TString & pc, const TString &codlev, const int levnum)
|
|
||||||
{
|
|
||||||
pc.overwrite(codlev.left(_code_lenght[levnum-1]),packed_lenght(levnum-1));
|
|
||||||
}
|
|
||||||
|
|
||||||
TString TMag_livelli::unpack_grpcode(const TString & pc, const int levnum)
|
|
||||||
{
|
|
||||||
int start=0;
|
|
||||||
for (int i=1; i<levnum; i++)
|
|
||||||
start+= _code_lenght[i-1];
|
|
||||||
if (start>=pc.len())
|
|
||||||
return("");
|
|
||||||
else {
|
|
||||||
if (levnum != _last_level && !_enabled[levnum-1])
|
|
||||||
return("");
|
|
||||||
return(pc.mid(start,levnum == _last_level ? -1 : _code_lenght[levnum-1]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TString TMag_livelli::build_tabcode(const TString & pc, const int levnum)
|
|
||||||
{
|
|
||||||
TString valore;
|
|
||||||
valore << levnum;
|
|
||||||
valore << unpack_grpcode(pc,levnum);
|
|
||||||
if (valore.len()>1)
|
|
||||||
return valore;
|
|
||||||
else
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// *******************************
|
// *******************************
|
||||||
// *******************************
|
// *******************************
|
||||||
#define MAXSIMBOLS 256
|
#define MAXSIMBOLS 256
|
||||||
@ -131,6 +35,13 @@ struct TAutoma_state {
|
|||||||
bool _final;
|
bool _final;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// *******************************
|
||||||
|
// *******************************
|
||||||
|
// automa per il riconoscimento di metacaratteri
|
||||||
|
#define EPSILON 0
|
||||||
|
#define FIRST_STATE 1
|
||||||
|
#define FIRST_NEMPTY_SYMBOL 1
|
||||||
|
|
||||||
// *******************************
|
// *******************************
|
||||||
// *******************************
|
// *******************************
|
||||||
// automa per il riconoscimento di metacaratteri
|
// automa per il riconoscimento di metacaratteri
|
||||||
@ -229,13 +140,6 @@ int TStateset::get_next()
|
|||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// *******************************
|
|
||||||
// *******************************
|
|
||||||
// automa per il riconoscimento di metacaratteri
|
|
||||||
#define EPSILON 0
|
|
||||||
#define FIRST_STATE 1
|
|
||||||
#define FIRST_NEMPTY_SYMBOL 1
|
|
||||||
|
|
||||||
// labels and states
|
// labels and states
|
||||||
bool TR_automa::is_state(int statenum)
|
bool TR_automa::is_state(int statenum)
|
||||||
{
|
{
|
||||||
@ -476,7 +380,6 @@ bool TR_automa::recognized(const char * t_str)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// *******************************
|
// *******************************
|
||||||
// gestione di stringhe di metacaratteri
|
// gestione di stringhe di metacaratteri
|
||||||
// *******************************
|
// *******************************
|
||||||
@ -486,6 +389,12 @@ bool TR_automa::recognized(const char * t_str)
|
|||||||
#define S_LETTER 3
|
#define S_LETTER 3
|
||||||
#define S_ANY 4
|
#define S_ANY 4
|
||||||
|
|
||||||
|
// *******************************
|
||||||
|
// *******************************
|
||||||
|
// riconoscimento di metacaratteri
|
||||||
|
class TR_automa;
|
||||||
|
|
||||||
|
|
||||||
bool TMetachar::recognized(const char * s)
|
bool TMetachar::recognized(const char * s)
|
||||||
{
|
{
|
||||||
return(_au->recognized(s));
|
return(_au->recognized(s));
|
||||||
@ -521,6 +430,7 @@ void TMetachar::add_tran(int s,unsigned char metasymbol, int nextstate)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// restituisce la stringa di metacaratteri del linguaggio riconosciuto
|
// restituisce la stringa di metacaratteri del linguaggio riconosciuto
|
||||||
const char * TMetachar::language() const
|
const char * TMetachar::language() const
|
||||||
{
|
{
|
||||||
@ -665,10 +575,157 @@ TMetachar::~TMetachar ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// **************************************
|
|
||||||
// **************************************
|
const char *TCodice_livelli::code_format(int levnum) const
|
||||||
// **************************************
|
{
|
||||||
// *** classi per il magazzino
|
if (levnum<0) {
|
||||||
// ***
|
levnum=max(last_level(),1);
|
||||||
|
}
|
||||||
|
((TCodart_livelli *)this)->add_metachar(levnum);
|
||||||
|
return ((TMetachar*)_metachars.objptr(levnum-1))->language();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool TCodice_livelli::fit_to_format(const char *codepart,int levnum) const
|
||||||
|
{
|
||||||
|
if (levnum<0) {
|
||||||
|
levnum=max(last_level(),1);
|
||||||
|
}
|
||||||
|
((TCodart_livelli *)this)->add_metachar(levnum);
|
||||||
|
return ((TMetachar*)_metachars.objptr(levnum-1))->recognized(codepart);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TCodice_livelli::add_metachar(int levnum)
|
||||||
|
{
|
||||||
|
if (_metachars.objptr(levnum-1)==NULL)
|
||||||
|
_metachars.add(new TMetachar(picture(levnum)),levnum-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// **************************
|
||||||
|
// classe codice a livelli
|
||||||
|
TCodice_livelli:: TCodice_livelli(const char *tabname,const char *tabgrp)
|
||||||
|
{
|
||||||
|
TTable _tabformato(tabname);
|
||||||
|
int e;
|
||||||
|
|
||||||
|
_last_level=0;
|
||||||
|
e=_tabformato.first();
|
||||||
|
for (int i=0; i< MANY_MAG_LEV; i++) {
|
||||||
|
_enabled[i]=(e==NOERR);
|
||||||
|
if (_enabled[i]) {
|
||||||
|
_name[i]=_tabformato.get("S0");
|
||||||
|
_code_lenght[i]=atoi(_tabformato.get("I0"));
|
||||||
|
_picture[i]=_tabformato.get("S1");
|
||||||
|
_last_level=i+1;
|
||||||
|
} else {
|
||||||
|
_name[i]="";
|
||||||
|
_code_lenght[i]=0;
|
||||||
|
_picture[i]="";
|
||||||
|
}
|
||||||
|
e=_tabformato.next();
|
||||||
|
}
|
||||||
|
_gruppi = new TDecoder(tabgrp);
|
||||||
|
}
|
||||||
|
|
||||||
|
const bool TCodice_livelli::enabled(int levnum) const
|
||||||
|
{
|
||||||
|
if (levnum<=MANY_MAG_LEV && levnum>0)
|
||||||
|
return(_enabled[levnum-1]);
|
||||||
|
else
|
||||||
|
return(FALSE) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int TCodice_livelli::code_lenght(int levnum) const
|
||||||
|
{
|
||||||
|
if (levnum<=MANY_MAG_LEV && levnum>0)
|
||||||
|
return(_code_lenght[levnum-1]);
|
||||||
|
else
|
||||||
|
return(0) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int TCodice_livelli::packed_lenght(int levnum) const
|
||||||
|
{
|
||||||
|
int start=0;
|
||||||
|
for (int i=1; i<=levnum && levnum<=MANY_MAG_LEV; i++)
|
||||||
|
start+= _code_lenght[i-1];
|
||||||
|
return start;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const TString & TCodice_livelli::name(int levnum) const
|
||||||
|
{
|
||||||
|
if (levnum<=MANY_MAG_LEV && levnum>0)
|
||||||
|
return(_name[levnum-1]);
|
||||||
|
else
|
||||||
|
return("");
|
||||||
|
}
|
||||||
|
|
||||||
|
const TString & TCodice_livelli::picture(int levnum) const
|
||||||
|
{
|
||||||
|
if (levnum<=MANY_MAG_LEV && levnum>0)
|
||||||
|
return(_picture[levnum-1]);
|
||||||
|
else
|
||||||
|
return("");
|
||||||
|
}
|
||||||
|
|
||||||
|
void TCodice_livelli::pack_grpcode(TString & pc, const TString &codlev, const int levnum)
|
||||||
|
{
|
||||||
|
pc.overwrite(codlev.left(_code_lenght[levnum-1]),packed_lenght(levnum-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
TString TCodice_livelli::unpack_grpcode(const TString & pc, const int levnum) const
|
||||||
|
{
|
||||||
|
int start=0;
|
||||||
|
for (int i=1; i<levnum; i++)
|
||||||
|
start+= _code_lenght[i-1];
|
||||||
|
if (start>=pc.len())
|
||||||
|
return("");
|
||||||
|
else {
|
||||||
|
if (levnum != _last_level && !_enabled[levnum-1])
|
||||||
|
return("");
|
||||||
|
return(pc.mid(start,levnum == _last_level ? -1 : _code_lenght[levnum-1]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TString TCodice_livelli::build_tabcode(const TString & pc, const int levnum) const
|
||||||
|
{
|
||||||
|
TString valore;
|
||||||
|
valore << levnum;
|
||||||
|
valore << unpack_grpcode(pc,levnum);
|
||||||
|
if (valore.len()>1)
|
||||||
|
return valore;
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const TString & TCodice_livelli::group_descr(const char * code, int levnum) const
|
||||||
|
{
|
||||||
|
return _gruppi->decode(build_tabcode(code,levnum));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TCodart_livelli ::TCodart_livelli() :
|
||||||
|
TCodice_livelli("FCA","GCA")
|
||||||
|
{
|
||||||
|
// imposta il riconoscimento dei caratteri del formato dell'ultima parte dell'articolo
|
||||||
|
TString80 format("");
|
||||||
|
TTable _tabfca("FCA");
|
||||||
|
if (_tabfca.last()==NOERR) {
|
||||||
|
format = _tabfca.get("S1");
|
||||||
|
}
|
||||||
|
_metachars.add(new TMetachar(format),max(last_level()-1,0));
|
||||||
|
}
|
||||||
|
|
||||||
|
TCodart_livelli ::~TCodart_livelli()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TCodgiac_livelli ::TCodgiac_livelli() :
|
||||||
|
TCodice_livelli("FCG","GCG")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user