Loading eeschema/class_libentry.cpp +18 −11 Original line number Diff line number Diff line Loading @@ -61,6 +61,9 @@ int LIB_PART::m_subpartIdSeparator = 0; int LIB_PART::m_subpartFirstId = 'A'; const wxChar traceSchLibMem[] = wxT( "KISCHLIBMEM" ); // public LIB_ALIAS::LIB_ALIAS( const wxString& aName, LIB_PART* aRootPart ): EDA_ITEM( LIB_ALIAS_T ), shared( aRootPart ) Loading @@ -85,10 +88,10 @@ LIB_ALIAS::~LIB_ALIAS() { wxASSERT_MSG( shared, wxT( "~LIB_ALIAS() without a LIB_PART" ) ); #if defined(DEBUG) && 1 printf( "%s: destroying alias:'%s' of part:'%s' alias count:%d.\n", __func__, TO_UTF8( name ), TO_UTF8( shared->GetName() ), int( shared->m_aliases.size() ) ); #endif wxLogTrace( traceSchLibMem, wxT( "%s: destroying alias:'%s' of part:'%s'." ), GetChars( wxString::FromAscii( __WXFUNCTION__ ) ), GetChars( name ), GetChars( shared->GetName() ) ); if( shared ) shared->RemoveAlias( this ); Loading Loading @@ -241,9 +244,10 @@ LIB_PART::LIB_PART( LIB_PART& aPart, PART_LIB* aLibrary ) : LIB_PART::~LIB_PART() { wxLogDebug( wxT( "%s: destroying part '%s' with alias list count of %d\n" ), wxLogTrace( traceSchLibMem, wxT( "%s: destroying part '%s' with alias list count of %u." ), GetChars( wxString::FromAscii( __WXFUNCTION__ ) ), GetChars( GetName() ), int( m_aliases.size() ) ); m_aliases.size() ); // If the part is being deleted directly rather than through the library, // delete all of the aliases. Loading Loading @@ -481,7 +485,7 @@ void LIB_PART::RemoveDrawItem( LIB_ITEM* aItem, EDA_DRAW_PANEL* aPanel, wxDC* aD { wxASSERT( aItem != NULL ); // none of the MANDATOR_FIELDS may be removed in RAM, but they may be // none of the MANDATORY_FIELDS may be removed in RAM, but they may be // omitted when saving to disk. if( aItem->Type() == LIB_FIELD_T ) { Loading Loading @@ -1692,10 +1696,13 @@ LIB_ALIAS* LIB_PART::RemoveAlias( LIB_ALIAS* aAlias ) { bool rename = aAlias->IsRoot(); DBG( printf( "%s: part:'%s' alias:'%s'\n", __func__, TO_UTF8( m_name ), TO_UTF8( aAlias->GetName() ) );) wxLogTrace( traceSchLibMem, wxT( "%s: part:'%s', alias:'%s', alias count %u, reference count %d." ), GetChars( wxString::FromAscii( __WXFUNCTION__ ) ), GetChars( m_name ), GetChars( aAlias->GetName() ), m_aliases.size(), m_me.use_count() ); it = m_aliases.erase( it ); Loading eeschema/class_libentry.h +9 −4 Original line number Diff line number Diff line /* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2004 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors. * Copyright (C) 2004-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License Loading Loading @@ -34,6 +34,7 @@ #include <lib_draw_item.h> #include <lib_field.h> #include <boost/shared_ptr.hpp> #include <boost/weak_ptr.hpp> class LINE_READER; class OUTPUTFORMATTER; Loading Loading @@ -69,6 +70,10 @@ enum LibrEntryOptions }; /// WXTRACE value to enable schematic library memory deletion debug output. extern const wxChar traceSchLibMem[]; /** * Part library alias object definition. * Loading Loading @@ -153,7 +158,7 @@ public: /** * Function SaveDocs * rrite the entry document information to \a aFormatter in "*.dcm" format. * write the entry document information to \a aFormatter in "*.dcm" format. * * @param aFormatter The #OUTPUTFORMATTER to write the alias documents to. * @return True if success writing else false. Loading eeschema/class_library.cpp +19 −3 Original line number Diff line number Diff line /* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2004 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors. * Copyright (C) 2004-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License Loading Loading @@ -73,6 +73,22 @@ PART_LIB::PART_LIB( int aType, const wxString& aFileName ) : PART_LIB::~PART_LIB() { // When the library is destroyed, all of the alias objects on the heap should be deleted. for( LIB_ALIAS_MAP::iterator it = m_amap.begin(); it != m_amap.end(); ++it ) { wxLogTrace( traceSchLibMem, wxT( "Removing alias %s from library %s." ), GetChars( it->second->GetName() ), GetChars( GetLogicalName() ) ); LIB_PART* part = it->second->GetPart(); LIB_ALIAS* alias = it->second; delete alias; // When the last alias of a part is destroyed, the part is no longer required and it // too is destroyed. if( part && part->GetAliasCount() == 0 ) delete part; } m_amap.clear(); } Loading Loading
eeschema/class_libentry.cpp +18 −11 Original line number Diff line number Diff line Loading @@ -61,6 +61,9 @@ int LIB_PART::m_subpartIdSeparator = 0; int LIB_PART::m_subpartFirstId = 'A'; const wxChar traceSchLibMem[] = wxT( "KISCHLIBMEM" ); // public LIB_ALIAS::LIB_ALIAS( const wxString& aName, LIB_PART* aRootPart ): EDA_ITEM( LIB_ALIAS_T ), shared( aRootPart ) Loading @@ -85,10 +88,10 @@ LIB_ALIAS::~LIB_ALIAS() { wxASSERT_MSG( shared, wxT( "~LIB_ALIAS() without a LIB_PART" ) ); #if defined(DEBUG) && 1 printf( "%s: destroying alias:'%s' of part:'%s' alias count:%d.\n", __func__, TO_UTF8( name ), TO_UTF8( shared->GetName() ), int( shared->m_aliases.size() ) ); #endif wxLogTrace( traceSchLibMem, wxT( "%s: destroying alias:'%s' of part:'%s'." ), GetChars( wxString::FromAscii( __WXFUNCTION__ ) ), GetChars( name ), GetChars( shared->GetName() ) ); if( shared ) shared->RemoveAlias( this ); Loading Loading @@ -241,9 +244,10 @@ LIB_PART::LIB_PART( LIB_PART& aPart, PART_LIB* aLibrary ) : LIB_PART::~LIB_PART() { wxLogDebug( wxT( "%s: destroying part '%s' with alias list count of %d\n" ), wxLogTrace( traceSchLibMem, wxT( "%s: destroying part '%s' with alias list count of %u." ), GetChars( wxString::FromAscii( __WXFUNCTION__ ) ), GetChars( GetName() ), int( m_aliases.size() ) ); m_aliases.size() ); // If the part is being deleted directly rather than through the library, // delete all of the aliases. Loading Loading @@ -481,7 +485,7 @@ void LIB_PART::RemoveDrawItem( LIB_ITEM* aItem, EDA_DRAW_PANEL* aPanel, wxDC* aD { wxASSERT( aItem != NULL ); // none of the MANDATOR_FIELDS may be removed in RAM, but they may be // none of the MANDATORY_FIELDS may be removed in RAM, but they may be // omitted when saving to disk. if( aItem->Type() == LIB_FIELD_T ) { Loading Loading @@ -1692,10 +1696,13 @@ LIB_ALIAS* LIB_PART::RemoveAlias( LIB_ALIAS* aAlias ) { bool rename = aAlias->IsRoot(); DBG( printf( "%s: part:'%s' alias:'%s'\n", __func__, TO_UTF8( m_name ), TO_UTF8( aAlias->GetName() ) );) wxLogTrace( traceSchLibMem, wxT( "%s: part:'%s', alias:'%s', alias count %u, reference count %d." ), GetChars( wxString::FromAscii( __WXFUNCTION__ ) ), GetChars( m_name ), GetChars( aAlias->GetName() ), m_aliases.size(), m_me.use_count() ); it = m_aliases.erase( it ); Loading
eeschema/class_libentry.h +9 −4 Original line number Diff line number Diff line /* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2004 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors. * Copyright (C) 2004-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License Loading Loading @@ -34,6 +34,7 @@ #include <lib_draw_item.h> #include <lib_field.h> #include <boost/shared_ptr.hpp> #include <boost/weak_ptr.hpp> class LINE_READER; class OUTPUTFORMATTER; Loading Loading @@ -69,6 +70,10 @@ enum LibrEntryOptions }; /// WXTRACE value to enable schematic library memory deletion debug output. extern const wxChar traceSchLibMem[]; /** * Part library alias object definition. * Loading Loading @@ -153,7 +158,7 @@ public: /** * Function SaveDocs * rrite the entry document information to \a aFormatter in "*.dcm" format. * write the entry document information to \a aFormatter in "*.dcm" format. * * @param aFormatter The #OUTPUTFORMATTER to write the alias documents to. * @return True if success writing else false. Loading
eeschema/class_library.cpp +19 −3 Original line number Diff line number Diff line /* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2004 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors. * Copyright (C) 2004-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License Loading Loading @@ -73,6 +73,22 @@ PART_LIB::PART_LIB( int aType, const wxString& aFileName ) : PART_LIB::~PART_LIB() { // When the library is destroyed, all of the alias objects on the heap should be deleted. for( LIB_ALIAS_MAP::iterator it = m_amap.begin(); it != m_amap.end(); ++it ) { wxLogTrace( traceSchLibMem, wxT( "Removing alias %s from library %s." ), GetChars( it->second->GetName() ), GetChars( GetLogicalName() ) ); LIB_PART* part = it->second->GetPart(); LIB_ALIAS* alias = it->second; delete alias; // When the last alias of a part is destroyed, the part is no longer required and it // too is destroyed. if( part && part->GetAliasCount() == 0 ) delete part; } m_amap.clear(); } Loading