16 using VertId = GraphVertId;
17 using EdgeId = GraphEdgeId;
19 using VertBitSet = GraphVertBitSet;
20 using EdgeBitSet = GraphEdgeBitSet;
22 using Neighbours = std::vector<EdgeId>;
23 using NeighboursPerVertex = Vector<Neighbours, VertId>;
30 assert( a == v0 || a == v1 );
31 return a == v0 ? v1 : v0;
35 assert( what != with );
36 assert( ( v0 == what && v1 != with ) || ( v1 == what && v0 != with ) );
44 auto operator <=>(
const EndVertices& )
const =
default;
52 [[nodiscard]]
size_t vertSize()
const {
return neighboursPerVertex_.size(); }
55 [[nodiscard]]
const VertBitSet & validVerts()
const {
return validVerts_; }
58 [[nodiscard]]
bool valid( VertId v )
const {
return validVerts_.test( v ); }
61 [[nodiscard]]
size_t edgeSize()
const {
return endsPerEdge_.size(); }
64 [[nodiscard]]
const EdgeBitSet & validEdges()
const {
return validEdges_; }
67 [[nodiscard]]
bool valid( EdgeId e )
const {
return validEdges_.test( e ); }
70 [[nodiscard]]
const Neighbours & neighbours( VertId v )
const {
return neighboursPerVertex_[v]; }
73 [[nodiscard]]
const EndVertices & ends( EdgeId e )
const {
return endsPerEdge_[e]; }
76 [[nodiscard]] MRMESH_API EdgeId findEdge( VertId a, VertId b )
const;
79 [[nodiscard]]
bool areNeighbors( VertId a, VertId b )
const {
return findEdge( a, b ).
valid(); }
83 MRMESH_API
void merge( VertId remnant, VertId dead, std::function<
void( EdgeId remnant, EdgeId dead )> onMergeEdges );
86 MRMESH_API
bool checkValidity()
const;
89 VertBitSet validVerts_;
90 EdgeBitSet validEdges_;
92 NeighboursPerVertex neighboursPerVertex_;
93 EndsPerEdge endsPerEdge_;
unsafe void construct(MR._ByValue_Vector_StdVectorMRGraphEdgeId_MRGraphVertId neighboursPerVertex, MR._ByValue_Vector_MRGraphEndVertices_MRGraphEdgeId endsPerEdge)
unsafe void merge(MR.GraphVertId remnant, MR.GraphVertId dead, MR.Std._ByValue_Function_VoidFuncFromMRGraphEdgeIdMRGraphEdgeId onMergeEdges)
readonly unsafe bool valid()