Wildmeshing Toolkit
Loading...
Searching...
No Matches
FlagAccessor.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "Accessor.hpp"
4namespace wmtk::attribute {
5
6
7template <typename MeshType = wmtk::Mesh>
9{
10public:
11 enum class FlagBit : char { Active = 0x1 };
12 static bool _is_active(char value) { return value & static_cast<char>(FlagBit::Active); }
13 static void _activate(char& value) { value |= static_cast<char>(FlagBit::Active); }
14 static void _deactivate(char& value) { value &= inverse_mask(FlagBit::Active); }
16
17
21 template <typename MeshType2>
25
26 bool is_active(int64_t t) const
27 {
29 }
30 void activate(int64_t t)
31 {
33 }
34 void deactivate(int64_t t)
35 {
37 }
38
39 constexpr static char inverse_mask(FlagBit bit) { return 0xFF ^ static_cast<char>(bit); }
40
41
43 const BaseAccessor& base_accessor() const { return m_base_accessor; }
44 operator BaseAccessor() const { return m_base_accessor; }
45
46protected:
48
49
50 IndexFlagAccessor index_access() const { return IndexAccessor(*this); }
51};
52
53template <typename MeshType = wmtk::Mesh>
54class FlagAccessor : private IndexFlagAccessor<MeshType>
55{
56public:
57 enum class FlagBit : char { Active = 1 };
59
61 using IndexBaseType::IndexBaseType;
62
63 template <typename MeshType2>
67
68 template <typename T>
69 bool is_active(const T& t) const
70 {
71 return IndexBaseType::_is_active(IndexBaseType::m_base_accessor.const_scalar_attribute(t));
72 }
73 template <typename T>
74 void activate(const T& t)
75 {
77 }
78 template <typename T>
79 void deactivate(const T& t)
80 {
82 }
83
84
85 const IndexBaseType& index_access() const { return *this; }
86 IndexBaseType& index_access() { return *this; }
87};
88
89
90} // namespace wmtk::attribute
A CachingAccessor that uses tuples for accessing attributes instead of indices.
Definition Accessor.hpp:28
CachingBaseType & index_access()
Definition Accessor.hpp:97
T const_scalar_attribute(const int64_t index) const
T & scalar_attribute(const int64_t index)
FlagAccessor(const FlagAccessor< MeshType2 > &o)
const IndexBaseType & index_access() const
bool is_active(const T &t) const
static bool _is_active(char value)
static void _deactivate(char &value)
IndexFlagAccessor(const IndexFlagAccessor< MeshType2 > &o)
static constexpr char inverse_mask(FlagBit bit)
IndexFlagAccessor index_access() const
Accessor< char, MeshType, 1 > BaseAccessor
const BaseAccessor & base_accessor() const
static void _activate(char &value)