6 #include "../utils/serialization.h"
7 #include "../mip_result.h"
12 #include <type_traits>
68 struct CompositeDescriptor
70 uint8_t descriptorSet;
71 uint8_t fieldDescriptor;
73 constexpr CompositeDescriptor(uint8_t descSet, uint8_t fieldDesc) : descriptorSet(descSet), fieldDescriptor(fieldDesc) {}
74 constexpr CompositeDescriptor(uint16_t combo) : descriptorSet(combo >> 8), fieldDescriptor(combo & 0xFF) {}
76 CompositeDescriptor& operator=(uint16_t combo) {
return *
this = CompositeDescriptor(combo); }
78 constexpr uint16_t as_u16()
const {
return (uint16_t(descriptorSet) << 8) | fieldDescriptor; }
82 constexpr
bool operator==(
const CompositeDescriptor& other)
const {
return other.descriptorSet == descriptorSet && other.fieldDescriptor == fieldDescriptor; }
83 constexpr
bool operator<(
const CompositeDescriptor& other)
const {
return as_u16() < other.as_u16(); }
90 template<
typename DerivedT>
struct Bitfield {};
92 template<
class Derived>
void insert (Serializer& serializer,
const Bitfield<Derived>& bitfield) {
insert(serializer,
static_cast<const Derived&
>(bitfield).value); }
93 template<
class Derived>
void extract(Serializer& serializer, Bitfield<Derived>& bitfield) {
extract(serializer,
static_cast<Derived&
>(bitfield).value); }
96 enum class FunctionSelector : uint8_t
127 template<
class MipCmd>
128 struct TypedResult :
public CmdResult
133 using CmdResult::CmdResult;
137 static constexpr CompositeDescriptor DESCRIPTOR = MipCmd::DESCRIPTOR;
141 constexpr CompositeDescriptor descriptor()
const {
return DESCRIPTOR; }
146 #endif // __cplusplus