19 constexpr Id() noexcept : id_( -1 ) { }
28 template <
typename U, std::enable_if_t<std::is_
integral_v<U>, std::
nullptr_t> =
nullptr>
29 explicit constexpr Id( U i ) noexcept : id_(
ValueType( i ) ) { }
31 constexpr operator ValueType()
const {
return id_; }
32 constexpr bool valid()
const {
return id_ >= 0; }
33 explicit constexpr operator bool()
const {
return id_ >= 0; }
50 constexpr Id operator --(
int ) {
auto res = *
this; --id_;
return res; }
51 constexpr Id operator ++(
int ) {
auto res = *
this; ++id_;
return res; }
58#if !MR_PARSING_FOR_C_BINDINGS && !MR_COMPILING_C_BINDINGS
80 constexpr Id() noexcept : id_( -1 ) { }
82 constexpr Id( UndirectedEdgeId u ) noexcept : id_( (
ValueType)u << 1 ) { assert( u.valid() ); }
84 explicit constexpr Id(
unsigned int i ) noexcept : id_( i ) { }
85 explicit constexpr Id(
size_t i ) noexcept : id_(
ValueType( i ) ) { }
86 constexpr operator ValueType()
const {
return id_; }
87 constexpr bool valid()
const {
return id_ >= 0; }
88 explicit constexpr operator bool()
const {
return id_ >= 0; }
92 constexpr Id sym()
const { assert(
valid() );
return Id(id_ ^ 1); }
94 constexpr bool even()
const { assert(
valid() );
return (id_ & 1) == 0; }
95 constexpr bool odd()
const { assert(
valid() );
return (id_ & 1) == 1; }
97 constexpr UndirectedEdgeId
undirected()
const { assert(
valid() );
return UndirectedEdgeId( id_ >> 1 ); }
98 constexpr operator UndirectedEdgeId()
const {
return undirected(); }
104 template <
typename U>
106 template <
typename U>
108 template <
typename U>
121#if !MR_PARSING_FOR_C_BINDINGS && !MR_COMPILING_C_BINDINGS
137 explicit constexpr Id(
int )
noexcept =
delete;
140 explicit constexpr operator bool()
const {
return id_ !=
~ValueType( 0 ); }
147 template <
typename U>
149 template <
typename U>
151 template <
typename U>
164#if !MR_PARSING_FOR_C_BINDINGS && !MR_COMPILING_C_BINDINGS
185inline constexpr FaceId
operator ""_f(
unsigned long long i )
noexcept {
return FaceId{ (int)i }; }
186inline constexpr VertId
operator ""_v(
unsigned long long i )
noexcept {
return VertId{ (int)i }; }
187inline constexpr EdgeId
operator ""_e(
unsigned long long i )
noexcept {
return EdgeId{ (int)i }; }
188inline constexpr UndirectedEdgeId
operator ""_ue(
unsigned long long i )
noexcept {
return UndirectedEdgeId{ (int)i }; }
189inline constexpr VoxelId
operator ""_vox(
unsigned long long i )
noexcept {
return VoxelId{ size_t( i ) }; }
194struct std::hash<
MR::Id<T>>
196 size_t operator() (
MR::Id<T> const& p )
const noexcept
constexpr bool odd() const
Definition MRMesh/MRId.h:95
constexpr bool valid() const
Definition MRMesh/MRId.h:87
int ValueType
Definition MRMesh/MRId.h:78
constexpr Id sym() const
Definition MRMesh/MRId.h:92
Id(NoInit) noexcept
Definition MRMesh/MRId.h:81
constexpr Id(UndirectedEdgeId u) noexcept
Definition MRMesh/MRId.h:82
constexpr Id(ValueType i) noexcept
Definition MRMesh/MRId.h:83
constexpr Id(size_t i) noexcept
Definition MRMesh/MRId.h:85
constexpr Id() noexcept
Definition MRMesh/MRId.h:80
constexpr Id(unsigned int i) noexcept
Definition MRMesh/MRId.h:84
constexpr ValueType & get() noexcept
Definition MRMesh/MRId.h:89
constexpr bool even() const
Definition MRMesh/MRId.h:94
constexpr UndirectedEdgeId undirected() const
Definition MRMesh/MRId.h:97
constexpr bool valid() const
Definition MRMesh/MRId.h:139
size_t ValueType
Definition MRMesh/MRId.h:132
constexpr ValueType & get() noexcept
Definition MRMesh/MRId.h:141
constexpr Id() noexcept
Definition MRMesh/MRId.h:134
Id(NoInit) noexcept
Definition MRMesh/MRId.h:135
constexpr Id(int) noexcept=delete
constexpr Id(ValueType i) noexcept
Definition MRMesh/MRId.h:136
Definition MRMesh/MRId.h:15
constexpr bool operator!=(Id b) const
Definition MRMesh/MRId.h:37
constexpr Id & operator+=(ValueType a)
Definition MRMesh/MRId.h:54
constexpr Id & operator++()
Definition MRMesh/MRId.h:48
Id(NoInit) noexcept
Definition MRMesh/MRId.h:20
constexpr bool operator==(Id b) const
Definition MRMesh/MRId.h:36
constexpr bool valid() const
Definition MRMesh/MRId.h:32
constexpr Id & operator-=(ValueType a)
Definition MRMesh/MRId.h:53
constexpr Id & operator--()
Definition MRMesh/MRId.h:47
constexpr Id() noexcept
Definition MRMesh/MRId.h:19
constexpr bool operator<(Id b) const
Definition MRMesh/MRId.h:38
constexpr ValueType & get() noexcept
Definition MRMesh/MRId.h:34
int ValueType
Definition MRMesh/MRId.h:17
constexpr Id(U i) noexcept
Definition MRMesh/MRId.h:29
Definition MRMesh/MRId.h:68
NoInitId()
Definition MRMesh/MRId.h:70
NoInitId(Id< T > id)
Definition MRMesh/MRId.h:71
BitSet operator-(const BitSet &a, const BitSet &b)
Definition MRMesh/MRBitSet.h:370
Definition MRCameraOrientationPlugin.h:8
class MRMESH_CLASS VoxelTag
Definition MRMesh/MRMeshFwd.h:99
constexpr NoInit noInit
Definition MRMesh/MRMeshFwd.h:91
class MRMESH_CLASS EdgeTag
Definition MRMesh/MRMeshFwd.h:94
Color operator+(const Color &a, const Color &b)
Definition MRMesh/MRColor.h:106
Definition MRMesh/MRMeshFwd.h:90