Ajout de tables de hash dans la figure CTL

This commit is contained in:
Ludovic Jacomme 2002-07-23 13:11:19 +00:00
parent 942970ddc1
commit f9c74c25c0
7 changed files with 131 additions and 51 deletions

View File

@ -57,8 +57,10 @@
# define CTL_DECLAR_ALL 0
# define CTL_DECLAR_VARIABLE 1
# define CTL_DECLAR_CONSTANT 2
# define CTL_MAX_DECLAR_TYPE 3
# define CTL_DECLAR_DEFINE 2
# define CTL_DECLAR_ASSUME 3
# define CTL_DECLAR_INITIAL 4
# define CTL_MAX_DECLAR_TYPE 5
/*------------------------------------------------------\
| |
@ -82,7 +84,9 @@
# define GetCtlNumDecl( F ) ((F)->HASH_DECLAR[ CTL_DECLAR_ALL ]->NUMBER_ELEM)
# define GetCtlNumDeclVar( F ) ((F)->HASH_DECLAR[ CTL_DECLAR_VARIABLE ]->NUMBER_ELEM)
# define GetCtlNumDeclCst( F ) ((F)->HASH_DECLAR[ CTL_DECLAR_CONSTANT ]->NUMBER_ELEM)
# define GetCtlNumDeclDef( F ) ((F)->HASH_DECLAR[ CTL_DECLAR_DEFINE ]->NUMBER_ELEM)
# define GetCtlNumDeclAss( F ) ((F)->HASH_DECLAR[ CTL_DECLAR_ASSUME ]->NUMBER_ELEM)
# define GetCtlNumDeclInit( F ) ((F)->HASH_DECLAR[ CTL_DECLAR_INITIAL ]->NUMBER_ELEM)
/*------------------------------------------------------\
| |
@ -92,8 +96,12 @@
# define searchctlsymvar( F, N, I ) \
(searchctlsym( (F), (N), (I), CTL_DECLAR_VARIABLE ))
# define searchctlsymcst( F, N, I ) \
(searchctlsym( (F), (N), (I), CTL_DECLAR_CONSTANT ))
# define searchctlsymdef( F, N, I ) \
(searchctlsym( (F), (N), (I), CTL_DECLAR_DEFINE ))
# define searchctlsymass( F, N, I ) \
(searchctlsym( (F), (N), (I), CTL_DECLAR_ASSUME ))
# define searchctlsyminit( F, N, I ) \
(searchctlsym( (F), (N), (I), CTL_DECLAR_INITIAL ))
# define searchctlsymall( F, N, I ) \
(searchctlsym( (F), (N), (I), CTL_DECLAR_ALL ))
@ -105,8 +113,12 @@
# define searchctldeclvar( F, N ) \
(searchctldecl( (F), (N), CTL_DECLAR_VARIABLE ))
# define searchctldeclcst( F, N ) \
(searchctldecl( (F), (N), CTL_DECLAR_CONSTANT ))
# define searchctldecldef( F, N ) \
(searchctldecl( (F), (N), CTL_DECLAR_DEFINE ))
# define searchctldeclass( F, N ) \
(searchctldecl( (F), (N), CTL_DECLAR_ASSUME ))
# define searchctldeclinit( F, N ) \
(searchctldecl( (F), (N), CTL_DECLAR_INITIAL ))
# define searchctldeclall( F, N ) \
(searchctldecl( (F), (N), CTL_DECLAR_ALL ))
@ -219,7 +231,9 @@
struct ctlfig_list *NEXT;
char *NAME;
ctltype_list *TYPE;
authtable *HASH_TYPE;
ctlform_list *FORM;
authtable *HASH_FORM;
ctldecl_list *DECLAR[ CTL_MAX_DECLAR_TYPE ];
authtable *HASH_DECLAR[ CTL_MAX_DECLAR_TYPE ];
void *CIRCUIT;
@ -288,7 +302,9 @@
extern ctldecl_list *addctldecl __P((ctlfig_list *Figure, vexexpr *Atom, unsigned char Type ));
extern ctldecl_list *addctldeclvar __P((ctlfig_list *Figure, vexexpr *Atom));
extern ctldecl_list *addctldeclcst __P((ctlfig_list *Figure, vexexpr *Atom));
extern ctldecl_list *addctldecldef __P((ctlfig_list *Figure, vexexpr *Atom));
extern ctldecl_list *addctldeclass __P((ctlfig_list *Figure, vexexpr *Atom));
extern ctldecl_list *addctldeclinit __P((ctlfig_list *Figure, vexexpr *Atom));
extern ctlline_list *addctlline __P((ctlfig_list *Figure, ctlline_list **HeadLine, long Line));
extern ctlline_list *addctlfileline __P((ctlfig_list *Figure, ctlline_list **HeadLine, char *File, long Line));

View File

@ -72,7 +72,9 @@
{
"ALL",
"VARIABLE",
"CONSTANT"
"DEFINE",
"ASSUME",
"INITIAL"
};
/*------------------------------------------------------------\
@ -109,6 +111,9 @@ ctlfig_list *addctlfig( Name )
Figure->HASH_DECLAR[ Type ] = createauthtable( 50 );
}
Figure->HASH_FORM = createauthtable( 50 );
Figure->HASH_TYPE = createauthtable( 50 );
return( Figure );
}
@ -239,51 +244,109 @@ ctldecl_list *addctldeclvar( Figure, Atom )
ctlfig_list *Figure;
vexexpr *Atom;
{
ctldecl_list *Constant;
ctldecl_list *Variable;
char *Name;
if ( ! IsVexNodeAtom( Atom ) ) Name = getvexarrayname( Atom );
else Name = GetVexAtomValue( Atom );
Constant = searchctldeclall( Figure, Name );
Variable = searchctldeclall( Figure, Name );
if ( Constant != (ctldecl_list *)0 )
if ( Variable != (ctldecl_list *)0 )
{
ctlerror( CTL_VARIABLE_EXIST_ERROR, Name, 0 );
ctlerror( CTL_DECLAR_EXIST_ERROR, Name, 0 );
}
Constant = loc_addctldecl( Figure, Atom, CTL_DECLAR_VARIABLE );
Variable = loc_addctldecl( Figure, Atom, CTL_DECLAR_VARIABLE );
return( Constant );
return( Variable );
}
/*------------------------------------------------------------\
| |
| Ctl Add Declaration Constant |
| Ctl Add Declaration Define |
| |
\------------------------------------------------------------*/
ctldecl_list *addctldeclcst( Figure, Atom )
ctldecl_list *addctldecldef( Figure, Atom )
ctlfig_list *Figure;
vexexpr *Atom;
{
ctldecl_list *Constant;
ctldecl_list *Define;
char *Name;
if ( ! IsVexNodeAtom( Atom ) ) Name = getvexarrayname( Atom );
else Name = GetVexAtomValue( Atom );
Constant = searchctldeclall( Figure, Name );
Define = searchctldeclall( Figure, Name );
if ( Constant != (ctldecl_list *)0 )
if ( Define != (ctldecl_list *)0 )
{
ctlerror( CTL_CONSTANT_EXIST_ERROR, Name, 0 );
ctlerror( CTL_DECLAR_EXIST_ERROR, Name, 0 );
}
Constant = loc_addctldecl( Figure, Atom, CTL_DECLAR_CONSTANT );
Define = loc_addctldecl( Figure, Atom, CTL_DECLAR_DEFINE );
return( Constant );
return( Define );
}
/*------------------------------------------------------------\
| |
| Ctl Add Declaration Assume |
| |
\------------------------------------------------------------*/
ctldecl_list *addctldeclass( Figure, Atom )
ctlfig_list *Figure;
vexexpr *Atom;
{
ctldecl_list *Assume;
char *Name;
if ( ! IsVexNodeAtom( Atom ) ) Name = getvexarrayname( Atom );
else Name = GetVexAtomValue( Atom );
Assume = searchctldeclall( Figure, Name );
if ( Assume != (ctldecl_list *)0 )
{
ctlerror( CTL_DECLAR_EXIST_ERROR, Name, 0 );
}
Assume = loc_addctldecl( Figure, Atom, CTL_DECLAR_ASSUME );
return( Assume );
}
/*------------------------------------------------------------\
| |
| Ctl Add Declaration Initial |
| |
\------------------------------------------------------------*/
ctldecl_list *addctldeclinit( Figure, Atom )
ctlfig_list *Figure;
vexexpr *Atom;
{
ctldecl_list *Initial;
char *Name;
if ( ! IsVexNodeAtom( Atom ) ) Name = getvexarrayname( Atom );
else Name = GetVexAtomValue( Atom );
Initial = searchctldeclall( Figure, Name );
if ( Initial != (ctldecl_list *)0 )
{
ctlerror( CTL_DECLAR_EXIST_ERROR, Name, 0 );
}
Initial = loc_addctldecl( Figure, Atom, CTL_DECLAR_INITIAL );
return( Initial );
}
/*------------------------------------------------------------\
@ -371,6 +434,8 @@ ctlform_list *addctlform( Figure, Name, Expr )
*(Form->PREV) = Form;
addauthelem( Figure->HASH_FORM, Name, (long)Form );
return( Form );
}
@ -408,6 +473,8 @@ ctltype_list *addctltype( Figure, Name, Index,
Type->BASE = Base;
Figure->TYPE = Type;
addauthelem( Figure->HASH_TYPE, Name, (long)Type );
return( Type );
}

View File

@ -165,6 +165,8 @@ int delctlfig( Name )
destroyauthtable( Figure->HASH_DECLAR[ Type ] );
}
destroyauthtable( Figure->HASH_FORM );
ScanForm = Figure->FORM;
while ( ScanForm != (ctlform_list *)0 )
@ -177,6 +179,8 @@ int delctlfig( Name )
freectlform( Delete );
}
destroyauthtable( Figure->HASH_TYPE );
ScanType = Figure->TYPE;
while ( ScanType != (ctltype_list *)0 )

View File

@ -97,12 +97,6 @@ void ctl_error( Error, Text1, Text2, File, Line )
case CTL_UNKNOWN_DECLAR_TYPE :
fprintf( stderr, "unknown declar type %ld for %s\n", (long)Text1, Text2 );
break;
case CTL_VARIABLE_EXIST_ERROR :
fprintf( stderr, "variable %s exists already\n", Text1 );
break;
case CTL_CONSTANT_EXIST_ERROR :
fprintf( stderr, "constant %s exists already\n", Text1 );
break;
case CTL_DECLAR_EXIST_ERROR :
fprintf( stderr, "symbol %s already declared\n", Text1 );
break;

View File

@ -52,14 +52,12 @@
| |
\------------------------------------------------------------*/
# define CTL_VARIABLE_EXIST_ERROR 0
# define CTL_CONSTANT_EXIST_ERROR 1
# define CTL_UNKNOWN_DECLAR_TYPE 2
# define CTL_UNDECLARED_SYMBOL 3
# define CTL_DECLAR_EXIST_ERROR 4
# define CTL_BAD_DECLAR_TYPE 5
# define CTL_ILLEGAL_INDEX_ERROR 6
# define CTL_ILLEGAL_POSITION_ERROR 7
# define CTL_UNKNOWN_DECLAR_TYPE 1
# define CTL_UNDECLARED_SYMBOL 2
# define CTL_DECLAR_EXIST_ERROR 3
# define CTL_BAD_DECLAR_TYPE 4
# define CTL_ILLEGAL_INDEX_ERROR 5
# define CTL_ILLEGAL_POSITION_ERROR 6
/*------------------------------------------------------------\
| |

View File

@ -210,18 +210,17 @@ ctlform_list *searchctlform( Figure, Name )
ctlfig_list *Figure;
char *Name;
{
ctlform_list *Form;
authelem *Element;
Name = namealloc( Name );
Name = namealloc( Name );
Element = searchauthelem( Figure->HASH_FORM, Name );
for ( Form = Figure->FORM;
Form != (ctlform_list *)0;
Form = Form->NEXT )
if ( Element != (authelem *)0 )
{
if ( Form->NAME == Name ) break;
return( (ctlform_list *)( Element->VALUE ) );
}
return( Form );
return( (ctlform_list *)0 );
}
/*------------------------------------------------------------\
@ -235,17 +234,16 @@ ctltype_list *searchctltype( Figure, Name )
ctlfig_list *Figure;
char *Name;
{
ctltype_list *Type;
authelem *Element;
Name = namealloc( Name );
Name = namealloc( Name );
Element = searchauthelem( Figure->HASH_TYPE, Name );
for ( Type = Figure->TYPE;
Type != (ctltype_list *)0;
Type = Type->NEXT )
if ( Element != (authelem *)0 )
{
if ( Type->NAME == Name ) break;
return( (ctltype_list *)( Element->VALUE ) );
}
return( Type );
return( (ctltype_list *)0 );
}

View File

@ -161,6 +161,9 @@ void viewctldecl( Decl )
fprintf( stdout, "\n\t\tVEX_INIT : " );
viewvexexprbound( Decl->VEX_INIT );
fprintf( stdout, "\n\t\tTYPE : %s",
( Decl->TYPE != (ctltype_list *)0 ) ? Decl->TYPE->NAME : "ERROR" );
fprintf( stdout, "\n\t\tDECL_SYM :\n" );
DeclSym = Decl->DECL_SYM;