32 if( !aRecord.
claims.empty() )
35 const auto key = [&](
const std::optional<KIID>& aItem ) -> std::optional<ITEM_KEY>
37 return aItem ? std::optional(
ITEM_KEY{ *aItem, aKey.
inst } ) : std::nullopt;
51 std::array<ITEM_KEY, 4> witnesses;
52 auto end = witnesses.begin();
54 for(
const SUMMARY* summary : { &aLeft, &aRight } )
56 for(
const auto& witness : summary->pinWitnesses )
63 std::sort( witnesses.begin(),
end,
KEY_LESS{ aKeys } );
64 end = std::unique( witnesses.begin(),
end );
65 std::copy( witnesses.begin(), std::min(
end, witnesses.begin() +
result.pinWitnesses.size() ),
66 result.pinWitnesses.begin() );
Session IDs are dense handles, never a canonical ordering.
bool Less(const ITEM_KEY &aLeft, const ITEM_KEY &aRight) const
Value keys and the key session of the schematic connectivity engine.
SUMMARY MakeSummary(const RECORD_KEY &aKey, const ISLAND_RECORD &aRecord)
Consumes a canonical BuildIslandRecord() result.
Strict weak order on claims by value.
std::array< std::optional< KIID >, 2 > pinWitnesses
The two smallest witness pin ids.
std::optional< KIID > noConnect
The smallest no-connect marker id.
std::vector< NAME_ID > netclasses
std::vector< CLAIM > claims
Descending by CLAIM_LESS, so front() is the island driver.
One item or pin in one sheet instance.
Orders keys by value through SESSION_KEYS::Less().
Orders name handles by UTF-8 value.
One island in one sheet instance.
INST_ID inst
The sheet instance of the record.
std::optional< ITEM_KEY > noConnect
The smallest no-connect marker.
std::optional< CLAIM > best
Greatest claim by CLAIM_LESS.
static SUMMARY Join(const SUMMARY &aLeft, const SUMMARY &aRight, const SESSION_KEYS &aKeys)
Inputs are canonical folds from one source snapshot.
std::vector< NAME_ID > netclasses
Sorted by name.
wxString result
Test unit parsing edge cases and error handling.