mirror of https://github.com/YosysHQ/abc.git
make it easy to add intialization functions to Abc_FrameInit()/Abc_FrameEnd()
This commit is contained in:
parent
51bf121073
commit
392390d23e
|
|
@ -59,6 +59,24 @@ extern void Abc2_End ( Abc_Frame_t * pAbc );
|
|||
extern void Abc85_Init( Abc_Frame_t * pAbc );
|
||||
extern void Abc85_End( Abc_Frame_t * pAbc );
|
||||
|
||||
static Abc_FrameInitializer_t* s_InitializerStart = NULL;
|
||||
static Abc_FrameInitializer_t* s_InitializerEnd = NULL;
|
||||
|
||||
void Abc_FrameAddInitializer( Abc_FrameInitializer_t* p )
|
||||
{
|
||||
if( ! s_InitializerStart )
|
||||
s_InitializerStart = p;
|
||||
|
||||
p->next = NULL;
|
||||
p->prev = s_InitializerEnd;
|
||||
|
||||
if ( s_InitializerEnd )
|
||||
s_InitializerEnd->next = p;
|
||||
|
||||
s_InitializerEnd = p;
|
||||
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/// FUNCTION DEFINITIONS ///
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -76,6 +94,8 @@ extern void Abc85_End( Abc_Frame_t * pAbc );
|
|||
***********************************************************************/
|
||||
void Abc_FrameInit( Abc_Frame_t * pAbc )
|
||||
{
|
||||
Abc_FrameInitializer_t* p;
|
||||
|
||||
Cmd_Init( pAbc );
|
||||
Cmd_CommandExecute( pAbc, "set checkread" );
|
||||
Io_Init( pAbc );
|
||||
|
|
@ -96,6 +116,10 @@ void Abc_FrameInit( Abc_Frame_t * pAbc )
|
|||
Abc85_Init( pAbc );
|
||||
#endif
|
||||
EXT_ABC_INIT(pAbc) // plugin for external functionality
|
||||
|
||||
for( p = s_InitializerStart ; p ; p = p->next )
|
||||
if(p->init)
|
||||
p->init(pAbc);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -112,6 +136,12 @@ void Abc_FrameInit( Abc_Frame_t * pAbc )
|
|||
***********************************************************************/
|
||||
void Abc_FrameEnd( Abc_Frame_t * pAbc )
|
||||
{
|
||||
Abc_FrameInitializer_t* p;
|
||||
|
||||
for( p = s_InitializerEnd ; p ; p = p->prev )
|
||||
if ( p->destroy )
|
||||
p->destroy(pAbc);
|
||||
|
||||
Abc_End( pAbc );
|
||||
Io_End( pAbc );
|
||||
Cmd_End( pAbc );
|
||||
|
|
|
|||
|
|
@ -132,6 +132,20 @@ struct Abc_Frame_t_
|
|||
EXT_ABC_FRAME // plugin for external functionality
|
||||
};
|
||||
|
||||
typedef void (*Abc_Frame_Initialization_Func)( Abc_Frame_t * pAbc );
|
||||
|
||||
struct Abc_FrameInitializer_t_;
|
||||
typedef struct Abc_FrameInitializer_t_ Abc_FrameInitializer_t;
|
||||
|
||||
struct Abc_FrameInitializer_t_
|
||||
{
|
||||
Abc_Frame_Initialization_Func init;
|
||||
Abc_Frame_Initialization_Func destroy;
|
||||
|
||||
Abc_FrameInitializer_t* next;
|
||||
Abc_FrameInitializer_t* prev;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/// GLOBAL VARIABLES ///
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -150,6 +164,7 @@ extern ABC_DLL int main( int argc, char * argv[] );
|
|||
/*=== mvInit.c ===================================================*/
|
||||
extern ABC_DLL void Abc_FrameInit( Abc_Frame_t * pAbc );
|
||||
extern ABC_DLL void Abc_FrameEnd( Abc_Frame_t * pAbc );
|
||||
extern ABC_DLL void Abc_FrameAddInitializer( Abc_FrameInitializer_t* p );
|
||||
/*=== mvFrame.c =====================================================*/
|
||||
extern ABC_DLL Abc_Frame_t * Abc_FrameAllocate();
|
||||
extern ABC_DLL void Abc_FrameDeallocate( Abc_Frame_t * p );
|
||||
|
|
|
|||
Loading…
Reference in New Issue