Hash symbol libraries per library rather than statically per cache type.
This commit is contained in:
parent
d0d472f39d
commit
fc3cad0b54
|
@ -2230,11 +2230,6 @@ void SCH_SEXPR_PLUGIN::cacheLib( const wxString& aLibraryFileName, const PROPERT
|
||||||
delete m_cache;
|
delete m_cache;
|
||||||
m_cache = new SCH_SEXPR_PLUGIN_CACHE( aLibraryFileName );
|
m_cache = new SCH_SEXPR_PLUGIN_CACHE( aLibraryFileName );
|
||||||
|
|
||||||
// Because m_cache is rebuilt, increment SYMBOL_LIBS::s_modify_generation
|
|
||||||
// to modify the hash value that indicate symbol to symbol links
|
|
||||||
// must be updated.
|
|
||||||
SYMBOL_LIBS::IncrementModifyGeneration();
|
|
||||||
|
|
||||||
if( !isBuffering( aProperties ) )
|
if( !isBuffering( aProperties ) )
|
||||||
m_cache->Load();
|
m_cache->Load();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1963,11 +1963,6 @@ void SCH_LEGACY_PLUGIN::cacheLib( const wxString& aLibraryFileName, const PROPER
|
||||||
delete m_cache;
|
delete m_cache;
|
||||||
m_cache = new SCH_LEGACY_PLUGIN_CACHE( aLibraryFileName );
|
m_cache = new SCH_LEGACY_PLUGIN_CACHE( aLibraryFileName );
|
||||||
|
|
||||||
// Because m_cache is rebuilt, increment SYMBOL_LIBS::s_modify_generation
|
|
||||||
// to modify the hash value that indicate symbol to symbol links
|
|
||||||
// must be updated.
|
|
||||||
SYMBOL_LIBS::IncrementModifyGeneration();
|
|
||||||
|
|
||||||
if( !isBuffering( aProperties ) )
|
if( !isBuffering( aProperties ) )
|
||||||
m_cache->Load();
|
m_cache->Load();
|
||||||
}
|
}
|
||||||
|
@ -1994,7 +1989,7 @@ bool SCH_LEGACY_PLUGIN::isBuffering( const PROPERTIES* aProperties )
|
||||||
int SCH_LEGACY_PLUGIN::GetModifyHash() const
|
int SCH_LEGACY_PLUGIN::GetModifyHash() const
|
||||||
{
|
{
|
||||||
if( m_cache )
|
if( m_cache )
|
||||||
return SCH_LEGACY_PLUGIN_CACHE::GetModifyHash();
|
return m_cache->GetModifyHash();
|
||||||
|
|
||||||
// If the cache hasn't been loaded, it hasn't been modified.
|
// If the cache hasn't been loaded, it hasn't been modified.
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -25,11 +25,8 @@
|
||||||
#include <wx_filename.h>
|
#include <wx_filename.h>
|
||||||
|
|
||||||
|
|
||||||
int SCH_LIB_PLUGIN_CACHE::m_modHash = 1; // starts at 1 and goes up
|
|
||||||
std::mutex SCH_LIB_PLUGIN_CACHE::m_modHashMutex;
|
|
||||||
|
|
||||||
|
|
||||||
SCH_LIB_PLUGIN_CACHE::SCH_LIB_PLUGIN_CACHE( const wxString& aFullPathAndFileName ) :
|
SCH_LIB_PLUGIN_CACHE::SCH_LIB_PLUGIN_CACHE( const wxString& aFullPathAndFileName ) :
|
||||||
|
m_modHash( 1 ),
|
||||||
m_fileName( aFullPathAndFileName ),
|
m_fileName( aFullPathAndFileName ),
|
||||||
m_libFileName( aFullPathAndFileName ),
|
m_libFileName( aFullPathAndFileName ),
|
||||||
m_isWritable( true ),
|
m_isWritable( true ),
|
||||||
|
@ -154,7 +151,7 @@ LIB_SYMBOL* SCH_LIB_PLUGIN_CACHE::removeSymbol( LIB_SYMBOL* aSymbol )
|
||||||
m_symbols.erase( it );
|
m_symbols.erase( it );
|
||||||
delete aSymbol;
|
delete aSymbol;
|
||||||
m_isModified = true;
|
m_isModified = true;
|
||||||
SCH_LIB_PLUGIN_CACHE::IncrementModifyHash();
|
IncrementModifyHash();
|
||||||
return firstChild;
|
return firstChild;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,5 +169,5 @@ void SCH_LIB_PLUGIN_CACHE::AddSymbol( const LIB_SYMBOL* aSymbol )
|
||||||
|
|
||||||
m_symbols[ name ] = const_cast< LIB_SYMBOL* >( aSymbol );
|
m_symbols[ name ] = const_cast< LIB_SYMBOL* >( aSymbol );
|
||||||
m_isModified = true;
|
m_isModified = true;
|
||||||
SCH_LIB_PLUGIN_CACHE::IncrementModifyHash();
|
IncrementModifyHash();
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,16 +43,16 @@ public:
|
||||||
SCH_LIB_PLUGIN_CACHE( const wxString& aLibraryPath );
|
SCH_LIB_PLUGIN_CACHE( const wxString& aLibraryPath );
|
||||||
virtual ~SCH_LIB_PLUGIN_CACHE();
|
virtual ~SCH_LIB_PLUGIN_CACHE();
|
||||||
|
|
||||||
static void IncrementModifyHash()
|
void IncrementModifyHash()
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> mut( SCH_LIB_PLUGIN_CACHE::m_modHashMutex );
|
std::lock_guard<std::mutex> mut( m_modHashMutex );
|
||||||
SCH_LIB_PLUGIN_CACHE::m_modHash++;
|
m_modHash++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int GetModifyHash()
|
int GetModifyHash()
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> mut( SCH_LIB_PLUGIN_CACHE::m_modHashMutex );
|
std::lock_guard<std::mutex> mut( m_modHashMutex );
|
||||||
return SCH_LIB_PLUGIN_CACHE::m_modHash;
|
return m_modHash;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Most all functions in this class throw IO_ERROR exceptions. There are no
|
// Most all functions in this class throw IO_ERROR exceptions. There are no
|
||||||
|
@ -88,8 +88,8 @@ public:
|
||||||
protected:
|
protected:
|
||||||
LIB_SYMBOL* removeSymbol( LIB_SYMBOL* aAlias );
|
LIB_SYMBOL* removeSymbol( LIB_SYMBOL* aAlias );
|
||||||
|
|
||||||
static int m_modHash; // Keep track of the modification status of the library.
|
int m_modHash; // Keep track of the modification status of the library.
|
||||||
static std::mutex m_modHashMutex;
|
std::mutex m_modHashMutex;
|
||||||
|
|
||||||
wxString m_fileName; // Absolute path and file name.
|
wxString m_fileName; // Absolute path and file name.
|
||||||
wxFileName m_libFileName; // Absolute path and file name is required here.
|
wxFileName m_libFileName; // Absolute path and file name is required here.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (C) 2004-2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
* Copyright (C) 2004-2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||||
* Copyright (C) 2008 Wayne Stambaugh <stambaughw@gmail.com>
|
* Copyright (C) 2008 Wayne Stambaugh <stambaughw@gmail.com>
|
||||||
* Copyright (C) 2004-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2004-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -45,10 +45,7 @@
|
||||||
#include <wx/tokenzr.h>
|
#include <wx/tokenzr.h>
|
||||||
|
|
||||||
SYMBOL_LIB::SYMBOL_LIB( SCH_LIB_TYPE aType, const wxString& aFileName,
|
SYMBOL_LIB::SYMBOL_LIB( SCH_LIB_TYPE aType, const wxString& aFileName,
|
||||||
SCH_IO_MGR::SCH_FILE_T aPluginType ) :
|
SCH_IO_MGR::SCH_FILE_T aPluginType ) :
|
||||||
// start @ != 0 so each additional library added
|
|
||||||
// is immediately detectable, zero would not be.
|
|
||||||
m_mod_hash( SYMBOL_LIBS::GetModifyGeneration() ),
|
|
||||||
m_pluginType( aPluginType )
|
m_pluginType( aPluginType )
|
||||||
{
|
{
|
||||||
type = aType;
|
type = aType;
|
||||||
|
@ -75,8 +72,9 @@ SYMBOL_LIB::~SYMBOL_LIB()
|
||||||
|
|
||||||
void SYMBOL_LIB::Save( bool aSaveDocFile )
|
void SYMBOL_LIB::Save( bool aSaveDocFile )
|
||||||
{
|
{
|
||||||
wxCHECK_RET( m_plugin != nullptr, wxString::Format( "no plugin defined for library `%s`.",
|
wxCHECK_RET( m_plugin != nullptr,
|
||||||
fileName.GetFullPath() ) );
|
wxString::Format( wxT( "no plugin defined for library `%s`." ),
|
||||||
|
fileName.GetFullPath() ) );
|
||||||
|
|
||||||
PROPERTIES props;
|
PROPERTIES props;
|
||||||
|
|
||||||
|
@ -409,28 +407,6 @@ void SYMBOL_LIBS::FindLibraryNearEntries( std::vector<LIB_SYMBOL*>& aCandidates,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int SYMBOL_LIBS::s_modify_generation = 1; // starts at 1 and goes up
|
|
||||||
std::mutex SYMBOL_LIBS::s_generationMutex;
|
|
||||||
|
|
||||||
|
|
||||||
int SYMBOL_LIBS::GetModifyHash()
|
|
||||||
{
|
|
||||||
int hash = 0;
|
|
||||||
|
|
||||||
for( SYMBOL_LIBS::const_iterator it = begin(); it != end(); ++it )
|
|
||||||
{
|
|
||||||
hash += it->GetModHash();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Rebuilding the cache (m_cache) does not change the GetModHash() value,
|
|
||||||
// but changes SYMBOL_LIBS::s_modify_generation.
|
|
||||||
// Take this change in account:
|
|
||||||
hash += SYMBOL_LIBS::GetModifyGeneration();
|
|
||||||
|
|
||||||
return hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SYMBOL_LIBS::LibNamesAndPaths( PROJECT* aProject, bool doSave,
|
void SYMBOL_LIBS::LibNamesAndPaths( PROJECT* aProject, bool doSave,
|
||||||
wxString* aPaths, wxArrayString* aNames )
|
wxString* aPaths, wxArrayString* aNames )
|
||||||
{
|
{
|
||||||
|
|
|
@ -64,26 +64,7 @@ class SYMBOL_LIBS : public SYMBOL_LIBS_BASE, public PROJECT::_ELEM
|
||||||
public:
|
public:
|
||||||
KICAD_T Type() override { return SYMBOL_LIBS_T; }
|
KICAD_T Type() override { return SYMBOL_LIBS_T; }
|
||||||
|
|
||||||
SYMBOL_LIBS()
|
SYMBOL_LIBS() {}
|
||||||
{
|
|
||||||
IncrementModifyGeneration();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void IncrementModifyGeneration()
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> mut( SYMBOL_LIBS::s_generationMutex );
|
|
||||||
++SYMBOL_LIBS::s_modify_generation;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int GetModifyGeneration()
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> mut( SYMBOL_LIBS::s_generationMutex );
|
|
||||||
return SYMBOL_LIBS::s_modify_generation;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return the modification hash for all libraries. The value returned
|
|
||||||
/// changes on every library modification.
|
|
||||||
int GetModifyHash();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allocate and adds a symbol library to the library list.
|
* Allocate and adds a symbol library to the library list.
|
||||||
|
@ -175,9 +156,6 @@ public:
|
||||||
const wxString& aLibraryName = wxEmptyString );
|
const wxString& aLibraryName = wxEmptyString );
|
||||||
|
|
||||||
int GetLibraryCount() { return size(); }
|
int GetLibraryCount() { return size(); }
|
||||||
|
|
||||||
static int s_modify_generation; ///< helper for GetModifyHash()
|
|
||||||
static std::mutex s_generationMutex;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue