Put FP_LIB_TABLE::Footprint*() functions on stage, but comment out lazy plugin lookup trick in FindRow() until these new API functions are used.
This commit is contained in:
parent
d82c3b9ab1
commit
248788f381
|
@ -59,6 +59,46 @@ FP_LIB_TABLE::FP_LIB_TABLE( FP_LIB_TABLE* aFallBackTable ) :
|
|||
}
|
||||
|
||||
|
||||
wxArrayString FP_LIB_TABLE::FootprintEnumerate( const wxString& aNickname )
|
||||
{
|
||||
const ROW* row = FindRow( aNickname );
|
||||
wxASSERT( (PLUGIN*) row->plugin );
|
||||
return row->plugin->FootprintEnumerate( row->GetFullURI( true ), row->GetProperties() );
|
||||
}
|
||||
|
||||
|
||||
MODULE* FP_LIB_TABLE::FootprintLoad( const wxString& aNickname, const wxString& aFootprintName )
|
||||
{
|
||||
const ROW* row = FindRow( aNickname );
|
||||
wxASSERT( (PLUGIN*) row->plugin );
|
||||
return row->plugin->FootprintLoad( row->GetFullURI( true ), aFootprintName, row->GetProperties() );
|
||||
}
|
||||
|
||||
|
||||
void FP_LIB_TABLE::FootprintSave( const wxString& aNickname, const MODULE* aFootprint )
|
||||
{
|
||||
const ROW* row = FindRow( aNickname );
|
||||
wxASSERT( (PLUGIN*) row->plugin );
|
||||
return row->plugin->FootprintSave( row->GetFullURI( true ), aFootprint, row->GetProperties() );
|
||||
}
|
||||
|
||||
|
||||
void FP_LIB_TABLE::FootprintDelete( const wxString& aNickname, const wxString& aFootprintName )
|
||||
{
|
||||
const ROW* row = FindRow( aNickname );
|
||||
wxASSERT( (PLUGIN*) row->plugin );
|
||||
return row->plugin->FootprintDelete( row->GetFullURI( true ), aFootprintName, row->GetProperties() );
|
||||
}
|
||||
|
||||
|
||||
bool FP_LIB_TABLE::IsFootprintLibWritable( const wxString& aNickname )
|
||||
{
|
||||
const ROW* row = FindRow( aNickname );
|
||||
wxASSERT( (PLUGIN*) row->plugin );
|
||||
return row->plugin->IsFootprintLibWritable( row->GetFullURI( true ) );
|
||||
}
|
||||
|
||||
|
||||
void FP_LIB_TABLE::Parse( FP_LIB_TABLE_LEXER* in ) throw( IO_ERROR, PARSE_ERROR )
|
||||
{
|
||||
/*
|
||||
|
@ -335,9 +375,9 @@ std::vector<wxString> FP_LIB_TABLE::GetLogicalLibs()
|
|||
}
|
||||
|
||||
|
||||
const FP_LIB_TABLE::ROW* FP_LIB_TABLE::findRow( const wxString& aNickName )
|
||||
FP_LIB_TABLE::ROW* FP_LIB_TABLE::findRow( const wxString& aNickName ) const
|
||||
{
|
||||
FP_LIB_TABLE* cur = this;
|
||||
FP_LIB_TABLE* cur = (FP_LIB_TABLE*) this;
|
||||
|
||||
do
|
||||
{
|
||||
|
@ -412,7 +452,7 @@ bool FP_LIB_TABLE::InsertRow( const ROW& aRow, bool doReplace )
|
|||
const FP_LIB_TABLE::ROW* FP_LIB_TABLE::FindRow( const wxString& aLibraryNickName )
|
||||
throw( IO_ERROR )
|
||||
{
|
||||
const ROW* row = findRow( aLibraryNickName );
|
||||
ROW* row = findRow( aLibraryNickName );
|
||||
|
||||
if( !row )
|
||||
{
|
||||
|
@ -421,23 +461,15 @@ const FP_LIB_TABLE::ROW* FP_LIB_TABLE::FindRow( const wxString& aLibraryNickName
|
|||
THROW_IO_ERROR( msg );
|
||||
}
|
||||
|
||||
/* enable this when FP_LIB_TABLE::Footprint*() functions are put into use.
|
||||
if( !row->plugin )
|
||||
row->setPlugin( IO_MGR::PluginFind( row->type ) );
|
||||
*/
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
|
||||
PLUGIN* FP_LIB_TABLE::PluginFind( const wxString& aLibraryNickName )
|
||||
throw( IO_ERROR )
|
||||
{
|
||||
const ROW* row = FindRow( aLibraryNickName );
|
||||
|
||||
// row will never be NULL here.
|
||||
|
||||
PLUGIN* plugin = IO_MGR::PluginFind( row->type );
|
||||
|
||||
return plugin;
|
||||
}
|
||||
|
||||
|
||||
const wxString FP_LIB_TABLE::ExpandSubstitutions( const wxString aString )
|
||||
{
|
||||
// We reserve the right to do this another way, by providing our own member
|
||||
|
|
|
@ -147,6 +147,8 @@ public:
|
|||
description = r.description;
|
||||
properties = r.properties ? new PROPERTIES( *r.properties ) : NULL;
|
||||
|
||||
setPlugin( NULL ); // do not copy the PLUGIN, it is lazily created.
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
@ -186,8 +188,16 @@ public:
|
|||
/**
|
||||
* Function GetFullURI
|
||||
* returns the full location specifying URI for the LIB.
|
||||
*
|
||||
* @param doEnvVarSubs tells this function to do the substitution, else not.
|
||||
*/
|
||||
const wxString& GetFullURI() const { return uri; }
|
||||
const wxString GetFullURI( bool doEnvVarSubs = false ) const
|
||||
{
|
||||
if( doEnvVarSubs )
|
||||
return FP_LIB_TABLE::ExpandSubstitutions( uri );
|
||||
else
|
||||
return uri;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function SetFullURI
|
||||
|
@ -258,13 +268,19 @@ public:
|
|||
properties = aProperties;
|
||||
}
|
||||
|
||||
void setPlugin( PLUGIN* aPlugin )
|
||||
{
|
||||
plugin.set( aPlugin );
|
||||
}
|
||||
|
||||
wxString nickName;
|
||||
wxString uri;
|
||||
LIB_T type;
|
||||
wxString options;
|
||||
wxString description;
|
||||
const
|
||||
PROPERTIES* properties;
|
||||
|
||||
const PROPERTIES* properties;
|
||||
PLUGIN::RELEASER plugin;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -362,11 +378,7 @@ public:
|
|||
*/
|
||||
std::vector<wxString> GetLogicalLibs();
|
||||
|
||||
//----<read accessors>----------------------------------------------------
|
||||
// the returning of a const wxString* tells if not found, but might be too
|
||||
// promiscuous?
|
||||
|
||||
#if 0 // PLUGIN API SUBSET, REBASED ON aNickname
|
||||
//-----<PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
|
||||
|
||||
/**
|
||||
* Function FootprintEnumerate
|
||||
|
@ -381,7 +393,7 @@ public:
|
|||
*
|
||||
* @throw IO_ERROR if the library cannot be found, or footprint cannot be loaded.
|
||||
*/
|
||||
wxArrayString FootprintEnumerate( const wxString& aNickname ) const;
|
||||
wxArrayString FootprintEnumerate( const wxString& aNickname );
|
||||
|
||||
/**
|
||||
* Function FootprintLoad
|
||||
|
@ -397,7 +409,7 @@ public:
|
|||
* @throw IO_ERROR if the library cannot be found or read. No exception
|
||||
* is thrown in the case where aFootprintName cannot be found.
|
||||
*/
|
||||
MODULE* FootprintLoad( const wxString& aNickname, const wxString& aFootprintName ) const;
|
||||
MODULE* FootprintLoad( const wxString& aNickname, const wxString& aFootprintName );
|
||||
|
||||
/**
|
||||
* Function FootprintSave
|
||||
|
@ -436,8 +448,8 @@ public:
|
|||
*/
|
||||
bool IsFootprintLibWritable( const wxString& aNickname );
|
||||
|
||||
#endif
|
||||
//----</read accessors>---------------------------------------------------
|
||||
//-----</PLUGIN API SUBSET, REBASED ON aNickname>---------------------------
|
||||
|
||||
|
||||
/**
|
||||
* Function InsertRow
|
||||
|
@ -451,17 +463,13 @@ public:
|
|||
*/
|
||||
bool InsertRow( const ROW& aRow, bool doReplace = false );
|
||||
|
||||
/**
|
||||
* Function PluginFind
|
||||
* returns a PLUGIN*. Caller should wrap that in a PLUGIN::RELEASER()
|
||||
* so when it goes out of scope, IO_MGR::PluginRelease() is called.
|
||||
*/
|
||||
PLUGIN* PluginFind( const wxString& aLibraryNickName ) throw( IO_ERROR );
|
||||
|
||||
/**
|
||||
* Function FindRow
|
||||
* returns a ROW if aNickName is found in this table or in any chained
|
||||
* fallBack table fragment, else NULL.
|
||||
* fallBack table fragment. The PLUGIN is loaded and attached
|
||||
* to the "plugin" field of the ROW if not already loaded.
|
||||
*
|
||||
* @throw IO_ERROR if aNickName cannot be found.
|
||||
*/
|
||||
const ROW* FindRow( const wxString& aNickName ) throw( IO_ERROR );
|
||||
|
||||
|
@ -564,7 +572,7 @@ protected:
|
|||
* returns a ROW if aNickName is found in this table or in any chained
|
||||
* fallBack table fragment, else NULL.
|
||||
*/
|
||||
const ROW* findRow( const wxString& aNickName );
|
||||
ROW* findRow( const wxString& aNickName ) const;
|
||||
|
||||
void reindex()
|
||||
{
|
||||
|
|
|
@ -416,6 +416,9 @@ public:
|
|||
{
|
||||
PLUGIN* plugin;
|
||||
|
||||
// private assignment operator so it's illegal
|
||||
RELEASER& operator=( RELEASER& aOther ) { return *this; }
|
||||
|
||||
public:
|
||||
RELEASER( PLUGIN* aPlugin = NULL ) :
|
||||
plugin( aPlugin )
|
||||
|
@ -425,15 +428,28 @@ public:
|
|||
~RELEASER()
|
||||
{
|
||||
if( plugin )
|
||||
IO_MGR::PluginRelease( plugin );
|
||||
release();
|
||||
}
|
||||
|
||||
operator PLUGIN* ()
|
||||
void release()
|
||||
{
|
||||
IO_MGR::PluginRelease( plugin );
|
||||
plugin = NULL;
|
||||
}
|
||||
|
||||
void set( PLUGIN* aPlugin )
|
||||
{
|
||||
if( plugin )
|
||||
release();
|
||||
plugin = aPlugin;
|
||||
}
|
||||
|
||||
operator PLUGIN* () const
|
||||
{
|
||||
return plugin;
|
||||
}
|
||||
|
||||
PLUGIN* operator -> ()
|
||||
PLUGIN* operator -> () const
|
||||
{
|
||||
return plugin;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue