25 #ifndef INCLUDED_MatrixConventions_h_GUID_82404AE2_0D13_46A4_4618_05AD5A20D7EA 26 #define INCLUDED_MatrixConventions_h_GUID_82404AE2_0D13_46A4_4618_05AD5A20D7EA 36 #include <type_traits> 42 enum class CompactMatrixFlags {
53 const bool rowmaj(0 != (flags & OSVR_MATRIX_MASK_ROWMAJOR));
54 const bool rowvec(0 != (flags & OSVR_MATRIX_MASK_ROWVECTORS));
57 return (rowmaj ^ rowvec);
64 if (matrixNeedsTranspose(flags)) {
65 set(CompactMatrixFlags::NeedsTranspose);
68 if (0 != (flags & OSVR_MATRIX_MASK_LHINPUT)) {
69 set(CompactMatrixFlags::LeftHandInput);
72 if (0 != (flags & OSVR_MATRIX_MASK_UNSIGNEDZ)) {
73 set(CompactMatrixFlags::UnsignedZ);
76 template <
typename... Args>
82 bool operator[](CompactMatrixFlags flag)
const {
83 return m_data[
static_cast<std::size_t
>(flag)];
86 unsigned long getValue()
const {
return m_data.to_ulong(); }
88 void set(CompactMatrixFlags flag) {
89 m_data.set(static_cast<std::size_t>(flag));
92 template <
typename... Args>
93 void set(CompactMatrixFlags flag, Args... args) {
100 static const std::size_t SIZE =
101 static_cast<std::size_t
>(CompactMatrixFlags::SIZEPLUSONE) - 1;
102 std::bitset<SIZE> m_data;
104 template <CompactMatrixFlags Flag>
106 std::integral_constant<std::size_t,
107 (0x1 <<
static_cast<std::size_t
>(
Flag))>;
110 template <std::size_t
State, CompactMatrixFlags... MyFlags>
111 struct ComputeBitsImpl;
113 template <std::
size_t State>
114 struct ComputeBitsImpl<State>
115 : std::integral_constant<std::size_t, State> {};
117 template <std::size_t State, CompactMatrixFlags
Flag,
118 CompactMatrixFlags... MyFlags>
119 struct ComputeBitsImpl<State, Flag, MyFlags...>
120 : ComputeBitsImpl<(State | FlagToMask<Flag>::value),
124 template <CompactMatrixFlags... MyFlags>
125 using ComputeBits = ComputeBitsImpl<0, MyFlags...>;
131 #endif // INCLUDED_MatrixConventions_h_GUID_82404AE2_0D13_46A4_4618_05AD5A20D7EA Definition: RunLoopManager.h:42
The main namespace for all C++ elements of the framework, internal and external.
Definition: namespace_osvr.dox:3
uint16_t OSVR_MatrixConventions
Type for passing matrix convention flags.
Definition: MatrixConventionsC.h:54
Definition: newuoa.h:1888
Definition: MatrixConventions.h:59
Definition: PoseState.h:164
A class that lightly wraps a bool, in order to provide easier maintenance of a "dirty" flag...
Definition: Flag.h:43