template <typename LibObjT>
class ConstEnumerationFieldClassMapping;
+template <typename LibObjT>
+class CommonBaseEnumerationFieldClass;
+
template <typename LibObjT, typename MappingT>
class CommonEnumerationFieldClass;
CommonBitArrayFieldClass<LibObjT> asBitArray() const noexcept;
CommonIntegerFieldClass<LibObjT> asInteger() const noexcept;
-
+ CommonBaseEnumerationFieldClass<LibObjT> asEnumeration() const noexcept;
CommonEnumerationFieldClass<LibObjT, ConstEnumerationFieldClassMapping<
const bt_field_class_enumeration_unsigned_mapping>>
asUnsignedEnumeration() const noexcept;
} /* namespace internal */
+template <typename LibObjT>
+class CommonBaseEnumerationFieldClass : public CommonIntegerFieldClass<LibObjT>
+{
+private:
+ using typename CommonIntegerFieldClass<LibObjT>::_ThisCommonIntegerFieldClass;
+
+protected:
+ using typename CommonFieldClass<LibObjT>::_LibObjPtr;
+ using _ThisCommonBaseEnumerationFieldClass = CommonBaseEnumerationFieldClass<LibObjT>;
+
+public:
+ using Shared = internal::SharedFieldClass<_ThisCommonBaseEnumerationFieldClass, LibObjT>;
+
+ explicit CommonBaseEnumerationFieldClass(const _LibObjPtr libObjPtr) noexcept :
+ _ThisCommonIntegerFieldClass {libObjPtr}
+ {
+ BT_ASSERT_DBG(this->isEnumeration());
+ }
+
+ template <typename OtherLibObjT>
+ CommonBaseEnumerationFieldClass(
+ const CommonBaseEnumerationFieldClass<OtherLibObjT>& fc) noexcept :
+ _ThisCommonIntegerFieldClass {fc}
+ {
+ }
+
+ template <typename OtherLibObjT>
+ _ThisCommonBaseEnumerationFieldClass&
+ operator=(const CommonBaseEnumerationFieldClass<OtherLibObjT>& fc) noexcept
+ {
+ _ThisCommonIntegerFieldClass::operator=(fc);
+ return *this;
+ }
+
+ std::uint64_t size() const noexcept
+ {
+ return bt_field_class_enumeration_get_mapping_count(this->_libObjPtr());
+ }
+
+ Shared shared() const noexcept
+ {
+ return Shared {*this};
+ }
+};
+
template <typename LibObjT, typename MappingT>
-class CommonEnumerationFieldClass final : public CommonIntegerFieldClass<LibObjT>
+class CommonEnumerationFieldClass final : public CommonBaseEnumerationFieldClass<LibObjT>
{
private:
using typename CommonFieldClass<LibObjT>::_LibObjPtr;
- using typename CommonIntegerFieldClass<LibObjT>::_ThisCommonIntegerFieldClass;
+ using typename CommonBaseEnumerationFieldClass<LibObjT>::_ThisCommonBaseEnumerationFieldClass;
using _ThisCommonEnumerationFieldClass = CommonEnumerationFieldClass<LibObjT, MappingT>;
public:
using Mapping = MappingT;
explicit CommonEnumerationFieldClass(const _LibObjPtr libObjPtr) noexcept :
- _ThisCommonIntegerFieldClass {libObjPtr}
+ _ThisCommonBaseEnumerationFieldClass {libObjPtr}
{
BT_ASSERT_DBG(this->isEnumeration());
}
template <typename OtherLibObjT>
CommonEnumerationFieldClass(
const CommonEnumerationFieldClass<OtherLibObjT, MappingT>& fc) noexcept :
- _ThisCommonIntegerFieldClass {fc}
+ _ThisCommonEnumerationFieldClass {fc}
{
}
_ThisCommonEnumerationFieldClass&
operator=(const CommonEnumerationFieldClass<OtherLibObjT, MappingT>& fc) noexcept
{
- _ThisCommonIntegerFieldClass::operator=(fc);
+ _ThisCommonEnumerationFieldClass::operator=(fc);
return *this;
}
- std::uint64_t size() const noexcept
- {
- return bt_field_class_enumeration_get_mapping_count(this->_libObjPtr());
- }
-
Mapping operator[](const std::uint64_t index) const noexcept
{
return Mapping {internal::CommonEnumerationFieldClassSpec<MappingT>::mappingByIndex(
}
};
+using EnumerationFieldClass = CommonBaseEnumerationFieldClass<bt_field_class>;
+using ConstEnumerationFieldClass = CommonBaseEnumerationFieldClass<const bt_field_class>;
+
using UnsignedEnumerationFieldClass =
CommonEnumerationFieldClass<bt_field_class, ConstUnsignedEnumerationFieldClassMapping>;
return CommonIntegerFieldClass<LibObjT> {this->_libObjPtr()};
}
+template <typename LibObjT>
+CommonBaseEnumerationFieldClass<LibObjT> CommonFieldClass<LibObjT>::asEnumeration() const noexcept
+{
+ BT_ASSERT_DBG(this->isEnumeration());
+ return CommonBaseEnumerationFieldClass<LibObjT> {this->_libObjPtr()};
+}
+
template <typename LibObjT>
CommonEnumerationFieldClass<LibObjT, ConstUnsignedEnumerationFieldClassMapping>
CommonFieldClass<LibObjT>::asUnsignedEnumeration() const noexcept