20 constexpr Id() noexcept : id_( -1 ) { }
30 template <
typename U =
int
34 >
requires std::is_integral_v<U>
36 , std::enable_if_t<std::is_integral_v<U>, std::nullptr_t> =
nullptr>
38 explicit constexpr Id( U i ) noexcept : id_(
ValueType( i ) ) { }
40 constexpr operator ValueType()
const {
return id_; }
41 constexpr bool valid()
const {
return id_ >= 0; }
42 explicit constexpr operator bool()
const {
return id_ >= 0; }
59 constexpr Id operator --(
int ) {
auto res = *
this; --id_;
return res; }
60 constexpr Id operator ++(
int ) {
auto res = *
this; ++id_;
return res; }
67#if !MR_PARSING_FOR_C_BINDINGS && !MR_COMPILING_C_BINDINGS
89 constexpr Id() noexcept : id_( -1 ) { }
91 constexpr Id( UndirectedEdgeId u ) noexcept : id_( (
ValueType)u << 1 ) { assert( u.valid() ); }
93 explicit constexpr Id(
unsigned int i ) noexcept : id_( i ) { }
94 explicit constexpr Id(
size_t i ) noexcept : id_(
ValueType( i ) ) { }
95 constexpr operator ValueType()
const {
return id_; }
96 constexpr bool valid()
const {
return id_ >= 0; }
97 explicit constexpr operator bool()
const {
return id_ >= 0; }
103 constexpr bool even()
const { assert(
valid() );
return (id_ & 1) == 0; }
104 constexpr bool odd()
const { assert(
valid() );
return (id_ & 1) == 1; }
106 constexpr UndirectedEdgeId
undirected()
const { assert(
valid() );
return UndirectedEdgeId( id_ >> 1 ); }
107 constexpr operator UndirectedEdgeId()
const {
return undirected(); }
113 template <
typename U>
115 template <
typename U>
117 template <
typename U>
130#if !MR_PARSING_FOR_C_BINDINGS && !MR_COMPILING_C_BINDINGS
146 explicit constexpr Id(
int )
noexcept =
delete;
149 explicit constexpr operator bool()
const {
return id_ !=
~ValueType( 0 ); }
156 template <
typename U>
158 template <
typename U>
160 template <
typename U>
173#if !MR_PARSING_FOR_C_BINDINGS && !MR_COMPILING_C_BINDINGS
194inline constexpr FaceId
operator ""_f(
unsigned long long i )
noexcept {
return FaceId{ (int)i }; }
195inline constexpr VertId
operator ""_v(
unsigned long long i )
noexcept {
return VertId{ (int)i }; }
196inline constexpr EdgeId
operator ""_e(
unsigned long long i )
noexcept {
return EdgeId{ (int)i }; }
197inline constexpr UndirectedEdgeId
operator ""_ue(
unsigned long long i )
noexcept {
return UndirectedEdgeId{ (int)i }; }
198inline constexpr VoxelId
operator ""_vox(
unsigned long long i )
noexcept {
return VoxelId{ size_t( i ) }; }
203struct std::hash<
MR::Id<T>>
205 size_t operator() (
MR::Id<T> const& p )
const noexcept
constexpr bool odd() const
Definition MRMesh/MRId.h:104
constexpr bool valid() const
Definition MRMesh/MRId.h:96
int ValueType
Definition MRMesh/MRId.h:87
constexpr Id sym() const
Definition MRMesh/MRId.h:101
Id(NoInit) noexcept
Definition MRMesh/MRId.h:90
constexpr Id(UndirectedEdgeId u) noexcept
Definition MRMesh/MRId.h:91
constexpr Id(ValueType i) noexcept
Definition MRMesh/MRId.h:92
constexpr Id(size_t i) noexcept
Definition MRMesh/MRId.h:94
constexpr Id() noexcept
Definition MRMesh/MRId.h:89
constexpr Id(unsigned int i) noexcept
Definition MRMesh/MRId.h:93
constexpr ValueType & get() noexcept
Definition MRMesh/MRId.h:98
constexpr bool even() const
Definition MRMesh/MRId.h:103
constexpr UndirectedEdgeId undirected() const
Definition MRMesh/MRId.h:106
constexpr bool valid() const
Definition MRMesh/MRId.h:148
size_t ValueType
Definition MRMesh/MRId.h:141
constexpr ValueType & get() noexcept
Definition MRMesh/MRId.h:150
constexpr Id() noexcept
Definition MRMesh/MRId.h:143
Id(NoInit) noexcept
Definition MRMesh/MRId.h:144
constexpr Id(int) noexcept=delete
constexpr Id(ValueType i) noexcept
Definition MRMesh/MRId.h:145
Definition MRMesh/MRId.h:16
constexpr bool operator!=(Id b) const
Definition MRMesh/MRId.h:46
constexpr Id & operator+=(ValueType a)
Definition MRMesh/MRId.h:63
constexpr Id & operator++()
Definition MRMesh/MRId.h:57
Id(NoInit) noexcept
Definition MRMesh/MRId.h:21
constexpr bool operator==(Id b) const
Definition MRMesh/MRId.h:45
constexpr bool valid() const
Definition MRMesh/MRId.h:41
constexpr Id & operator-=(ValueType a)
Definition MRMesh/MRId.h:62
constexpr Id & operator--()
Definition MRMesh/MRId.h:56
constexpr Id() noexcept
Definition MRMesh/MRId.h:20
constexpr bool operator<(Id b) const
Definition MRMesh/MRId.h:47
constexpr ValueType & get() noexcept
Definition MRMesh/MRId.h:43
int ValueType
Definition MRMesh/MRId.h:18
constexpr Id(U i) noexcept
Definition MRMesh/MRId.h:38
Definition MRMesh/MRId.h:77
NoInitId()
Definition MRMesh/MRId.h:79
NoInitId(Id< T > id)
Definition MRMesh/MRId.h:80
BitSet operator-(const BitSet &a, const BitSet &b)
Definition MRMesh/MRBitSet.h:438
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