Remove duplicated routine and fix bug in UTIL version.

This commit is contained in:
Jeff Young 2021-04-17 15:10:59 +01:00
parent f7ae819430
commit 13473420e5
5 changed files with 44 additions and 44 deletions

View File

@ -32,16 +32,25 @@
namespace UTIL
{
wxString GetReferencePrefix( const wxString& aRefDes )
wxString GetRefDesPrefix( const wxString& aRefDes )
{
// find the first non-digit character from the back
// find the first non-digit, non-question-mark character from the back
auto res = std::find_if( aRefDes.rbegin(), aRefDes.rend(),
[]( wxUniChar aChr ) { return !std::isdigit( aChr ); } );
[]( wxUniChar aChr )
{
return aChr != '?' && !std::isdigit( aChr );
} );
return { aRefDes.begin(), res.base() };
}
wxString GetRefDesUnannotated( const wxString& aSource )
{
return UTIL::GetRefDesPrefix( aSource ) + wxT( "?" );
}
int RefDesStringCompare( const wxString& aFirst, const wxString& aSecond )
{
// Compare unescaped text

View File

@ -34,7 +34,7 @@
#include <schematic.h>
#include <trace_helpers.h>
#include <trigo.h>
#include <refdes_utils.h>
/**
* Convert a wxString to UTF8 and replace any control characters with a ~,
@ -92,29 +92,6 @@ static LIB_PART* dummy()
}
wxString refDesPrefix( const wxString& aSource )
{
wxString result;
size_t sourceLen = aSource.length();
for( size_t i = 0; i < sourceLen; ++i )
{
if( aSource[i] == '?' || wxIsdigit( aSource[i] ) )
break;
result += aSource[i];
}
return result;
}
wxString refDesUnannotated( const wxString& aSource )
{
return refDesPrefix( aSource ) + wxT( "?" );
}
SCH_COMPONENT::SCH_COMPONENT( const wxPoint& aPos, SCH_ITEM* aParent ) :
SCH_ITEM( aParent, SCH_COMPONENT_T )
{
@ -147,10 +124,10 @@ SCH_COMPONENT::SCH_COMPONENT( const LIB_PART& aPart, const LIB_ID& aLibId,
true, /* reset ref */
true /* reset other fields */ );
m_prefix = refDesPrefix( m_part->GetReferenceField().GetText() );
m_prefix = UTIL::GetRefDesPrefix( m_part->GetReferenceField().GetText() );
if( aSheet )
SetRef( aSheet, refDesUnannotated( m_prefix ) );
SetRef( aSheet, UTIL::GetRefDesUnannotated( m_prefix ) );
// Inherit the include in bill of materials and board netlist settings from library symbol.
m_inBom = aPart.GetIncludeInBom();
@ -476,7 +453,7 @@ const wxString SCH_COMPONENT::GetRef( const SCH_SHEET_PATH* sheet, bool aInclude
}
if( ref.IsEmpty() )
ref = refDesUnannotated( m_prefix );
ref = UTIL::GetRefDesUnannotated( m_prefix );
if( aIncludeUnit && GetUnitCount() > 1 )
ref += LIB_PART::SubReference( GetUnit() );
@ -487,7 +464,7 @@ const wxString SCH_COMPONENT::GetRef( const SCH_SHEET_PATH* sheet, bool aInclude
bool SCH_COMPONENT::IsReferenceStringValid( const wxString& aReferenceString )
{
return !refDesPrefix( aReferenceString ).IsEmpty();
return !UTIL::GetRefDesPrefix( aReferenceString ).IsEmpty();
}
@ -526,7 +503,7 @@ void SCH_COMPONENT::SetRef( const SCH_SHEET_PATH* sheet, const wxString& ref )
rf->SetText( ref ); // for drawing.
// Reinit the m_prefix member if needed
m_prefix = refDesPrefix( ref );
m_prefix = UTIL::GetRefDesPrefix( ref );
if( m_prefix.IsEmpty() )
m_prefix = wxT( "U" );
@ -581,7 +558,7 @@ void SCH_COMPONENT::SetUnitSelection( const SCH_SHEET_PATH* aSheet, int aUnitSel
}
// didn't find it; better add it
AddHierarchicalReference( path, refDesUnannotated( m_prefix ), aUnitSelection );
AddHierarchicalReference( path, UTIL::GetRefDesUnannotated( m_prefix ), aUnitSelection );
}
@ -638,7 +615,8 @@ void SCH_COMPONENT::SetValue( const SCH_SHEET_PATH* sheet, const wxString& aValu
}
// didn't find it; better add it
AddHierarchicalReference( path, refDesUnannotated( m_prefix ), m_unit, aValue, wxEmptyString );
AddHierarchicalReference( path, UTIL::GetRefDesUnannotated( m_prefix ), m_unit,
aValue, wxEmptyString );
}
@ -688,8 +666,8 @@ void SCH_COMPONENT::SetFootprint( const SCH_SHEET_PATH* sheet, const wxString& a
}
// didn't find it; better add it
AddHierarchicalReference( path, refDesUnannotated( m_prefix ), m_unit, wxEmptyString,
aFootprint );
AddHierarchicalReference( path, UTIL::GetRefDesUnannotated( m_prefix ), m_unit,
wxEmptyString, aFootprint );
}
@ -1039,7 +1017,7 @@ bool SCH_COMPONENT::ResolveTextVar( wxString* token, int aDepth ) const
void SCH_COMPONENT::ClearAnnotation( const SCH_SHEET_PATH* aSheetPath )
{
// Build a reference with no annotation, i.e. a reference ending with a single '?'
wxString defRef = refDesUnannotated( m_prefix );
wxString defRef = UTIL::GetRefDesUnannotated( m_prefix );
if( aSheetPath )
{

View File

@ -1,7 +1,7 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2019 KiCad Developers, see CHANGELOG.TXT for contributors.
* Copyright (C) 2019-2021 KiCad Developers, see CHANGELOG.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
@ -38,10 +38,21 @@ namespace UTIL
* Get the (non-numeric) prefix from a refdes - e.g.
* R1 -> R
* IC34 -> IC
* U? -> U
* @param aRefDes full refdes
* @return the prefix, or empty string if nothing found
*/
wxString GetReferencePrefix( const wxString& aRefDes );
wxString GetRefDesPrefix( const wxString& aRefDes );
/**
* Return an unannotated refdes from either a prefix or an existing refdes.
* R -> R?
* IC34 -> IC?
* U? -> U?
* @param aRefDes
* @return
*/
wxString GetRefDesUnannotated( const wxString& aRefDes );
/**
* Acts just like the strcmp function but treats numbers within the string text

View File

@ -1705,7 +1705,9 @@ wxString FOOTPRINT::GetNextPadName( const wxString& aLastPadName ) const
for( PAD* pad : m_pads )
usedNames.insert( pad->GetName() );
wxString prefix = UTIL::GetReferencePrefix( aLastPadName );
// Pad names aren't technically reference designators, but the formatting is close enough
// for these to give us what we need.
wxString prefix = UTIL::GetRefDesPrefix( aLastPadName );
int num = GetTrailingInt( aLastPadName );
while( usedNames.count( wxString::Format( "%s%d", prefix, num ) ) )
@ -1720,7 +1722,7 @@ void FOOTPRINT::IncrementReference( int aDelta )
const wxString& refdes = GetReference();
SetReference( wxString::Format( wxT( "%s%i" ),
UTIL::GetReferencePrefix( refdes ),
UTIL::GetRefDesPrefix( refdes ),
GetTrailingInt( refdes ) + aDelta ) );
}

View File

@ -38,7 +38,7 @@ BOOST_AUTO_TEST_SUITE( RefdesUtils )
/**
* Test the #UTIL::GetReferencePrefix function
* Test the #UTIL::GetRefDesPrefix function
*/
BOOST_AUTO_TEST_CASE( GetPrefix )
{
@ -60,7 +60,7 @@ BOOST_AUTO_TEST_CASE( GetPrefix )
{
BOOST_TEST_CONTEXT( "Testing: " << c.first )
{
BOOST_CHECK_EQUAL( UTIL::GetReferencePrefix( c.first ), c.second );
BOOST_CHECK_EQUAL( UTIL::GetRefDesPrefix( c.first ), c.second );
}
}
}