Wildmeshing Toolkit
FlagAccessor.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "Accessor.hpp"
4 namespace wmtk::attribute {
5 
6 
7 template <typename MeshType = wmtk::Mesh>
9 {
10 public:
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 
19  : m_base_accessor{std::move(acc)}
20  {}
21  template <typename MeshType2>
24  {}
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 
46 protected:
48 
49 
50  IndexFlagAccessor index_access() const { return IndexAccessor(*this); }
51 };
52 
53 template <typename MeshType = wmtk::Mesh>
54 class FlagAccessor : private IndexFlagAccessor<MeshType>
55 {
56 public:
57  enum class FlagBit : char { Active = 1 };
59 
61  using IndexBaseType::IndexBaseType;
62 
63  template <typename MeshType2>
66  {}
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:25
CachingBaseType & index_access()
Definition: Accessor.hpp:95
T const_scalar_attribute(const int64_t index) const
T & scalar_attribute(const int64_t index)
const IndexBaseType & index_access() const
FlagAccessor(const FlagAccessor< MeshType2 > &o)
BaseAccessor & base_accessor()
IndexBaseType & index_access()
bool is_active(const T &t) const
static bool _is_active(char value)
bool is_active(int64_t t) const
static void _deactivate(char &value)
IndexFlagAccessor(const IndexFlagAccessor< MeshType2 > &o)
IndexFlagAccessor index_access() const
constexpr static char inverse_mask(FlagBit bit)
Accessor< char, MeshType, 1 > BaseAccessor
static void _activate(char &value)
const BaseAccessor & base_accessor() const
Definition: autodiff.h:995