22#include <unordered_map> 
   23#include <unordered_set> 
   49                                              const std::vector<T>& aExistingRefs,
 
   50                                              const std::vector<int>& aRequiredUnits)>;
 
   74    bool Insert( 
const std::string& aRefDes );
 
   82    bool Contains( 
const std::string& aRefDes ) 
const;
 
  109                               const std::map<
int, std::vector<SCH_REFERENCE>>& aRefNumberMap,
 
  110                               const std::vector<int>& aRequiredUnits,
 
  192    bool insertImpl( 
const std::string& aRefDes );
 
  215    std::pair<std::string, int> 
parseRefDes( 
const std::string& aRefDes ) 
const;
 
  243                            const std::vector<SCH_REFERENCE>& aRefVector,
 
  244                            const std::vector<int>& aRequiredUnits ) 
const;
 
  253    bool insertNumber( 
const std::string& aPrefix, 
int aNumber );
 
  278    std::vector<std::string> 
splitString( 
const std::string& aStr, 
char aDelimiter ) 
const;
 
 
void updateBaseNext(PREFIX_DATA &aData) const
 
std::string escapeForSerialization(const std::string &aStr) const
Escape special characters for serialization.
 
bool insertNumber(const std::string &aPrefix, int aNumber)
Insert a number for a specific prefix, updating internal structures.
 
void ClearUnitsChecker()
Clear the external units checker, reverting to default behavior.
 
bool Deserialize(const std::string &aData)
Deserialize tracker data from string representation.
 
std::vector< std::string > splitString(const std::string &aStr, char aDelimiter) const
Split string by delimiter, handling escaped characters.
 
int GetNextRefDes(const std::string &aPrefix, int aMinValue=1)
Get the next available reference designator for a given prefix and reserve it.
 
bool m_reuseRefDes
If true, allows reusing existing reference designators.
 
std::mutex m_mutex
Mutex for thread safety.
 
int GetNextRefDesForUnits(const SCH_REFERENCE &aRef, const std::map< int, std::vector< SCH_REFERENCE > > &aRefNumberMap, const std::vector< int > &aRequiredUnits, int aMinValue)
Get the next available reference designator number for multi-unit symbols.
 
std::unordered_set< std::string > m_allRefDes
 
void SetReuseRefDes(bool aReuse)
 
bool GetReuseRefDes() const
 
bool Insert(const std::string &aRefDes)
Insert a reference designator into the tracker.
 
void clearImpl()
Clear all internal data structures without locking.
 
size_t Size() const
Get the total count of stored reference designators.
 
std::string unescapeFromSerialization(const std::string &aStr) const
Unescape special characters from serialization.
 
bool insertImpl(const std::string &aRefDes)
Internal implementation of Insert without locking.
 
int findNextAvailable(const PREFIX_DATA &aData, int aMinValue) const
Find next available number for a prefix starting from a minimum value.
 
REFDES_TRACKER(bool aThreadSafe=false)
Constructor.
 
bool areUnitsAvailable(const SCH_REFERENCE &aRef, const std::vector< SCH_REFERENCE > &aRefVector, const std::vector< int > &aRequiredUnits) const
Check if all required units are available for a given reference number.
 
void SetUnitsChecker(const UNITS_CHECKER_FUNC< SCH_REFERENCE > &aChecker)
Set an external units checker function for SCH_REFERENCE objects.
 
void updateCacheOnInsert(PREFIX_DATA &aData, int aInsertedNumber) const
Update cached next available values when a number is inserted.
 
std::string Serialize() const
Serialize the tracker data to a compact string representation.
 
std::unordered_map< std::string, PREFIX_DATA > m_prefixData
Map from prefix to its tracking data.
 
bool m_threadSafe
True if thread safety is enabled.
 
bool Contains(const std::string &aRefDes) const
Check if a reference designator exists in the tracker.
 
std::pair< std::string, int > parseRefDes(const std::string &aRefDes) const
Parse a reference designator into prefix and numerical suffix.
 
bool containsImpl(const std::string &aRefDes) const
Check if a reference designator exists in the tracker without locking.
 
UNITS_CHECKER_FUNC< SCH_REFERENCE > m_externalUnitsChecker
External units checker function (optional)
 
void Clear()
Clear all stored reference designators.
 
A helper to define a symbol's reference designator in a schematic.
 
std::function< bool(const T &aTestRef, const std::vector< T > &aExistingRefs, const std::vector< int > &aRequiredUnits)> UNITS_CHECKER_FUNC
Function type for external units availability checking.
 
Data structure for tracking used numbers and caching next available values.
 
std::set< int > m_usedNumbers
Sorted set of used numbers for this prefix.
 
bool m_cacheValid
True if m_baseNext cache is valid.
 
int m_baseNext
Next available from 1 (cached)
 
std::map< int, int > m_nextCache
Cache of next available number for given min values.