} /* namespace internal */
+class ConstBitArrayFieldClassFlag final : public BorrowedObject<const bt_field_class_bit_array_flag>
+{
+public:
+ using RangeSet = ConstUnsignedIntegerRangeSet;
+
+ explicit ConstBitArrayFieldClassFlag(const LibObjPtr libObjPtr) noexcept :
+ _ThisBorrowedObject {libObjPtr}
+ {
+ }
+
+ RangeSet ranges() const noexcept
+ {
+ return RangeSet {
+ bt_field_class_bit_array_flag_borrow_index_ranges_const(this->libObjPtr())};
+ }
+
+ bt2c::CStringView label() const noexcept
+ {
+ return bt_field_class_bit_array_flag_get_label(this->libObjPtr());
+ }
+};
+
template <typename LibObjT>
class CommonBitArrayFieldClass final : public CommonFieldClass<LibObjT>
{
public:
using typename CommonFieldClass<LibObjT>::LibObjPtr;
using Shared = SharedFieldClass<CommonBitArrayFieldClass<LibObjT>, LibObjT>;
+ using Iterator = BorrowedObjectIterator<CommonBitArrayFieldClass>;
explicit CommonBitArrayFieldClass(const LibObjPtr libObjPtr) noexcept :
_ThisCommonFieldClass {libObjPtr}
return bt_field_class_bit_array_get_length(this->libObjPtr());
}
+ ConstBitArrayFieldClassFlag operator[](const std::uint64_t index) const noexcept
+ {
+ return ConstBitArrayFieldClassFlag {
+ bt_field_class_bit_array_borrow_flag_by_index_const(this->libObjPtr(), index)};
+ }
+
+ OptionalBorrowedObject<ConstBitArrayFieldClassFlag>
+ operator[](const bt2c::CStringView label) const noexcept
+ {
+ return bt_field_class_bit_array_borrow_flag_by_label_const(this->libObjPtr(), label);
+ }
+
+ CommonBitArrayFieldClass addFlag(const bt2c::CStringView label,
+ const ConstBitArrayFieldClassFlag::RangeSet ranges) const
+ {
+ static_assert(!std::is_const<LibObjT>::value,
+ "Not available with `bt2::ConstBitArrayFieldClass`.");
+
+ if (bt_field_class_bit_array_add_flag(this->libObjPtr(), label, ranges.libObjPtr()) ==
+ BT_FIELD_CLASS_BIT_ARRAY_ADD_FLAG_STATUS_MEMORY_ERROR) {
+ throw MemoryError {};
+ }
+
+ return *this;
+ }
+
+ Iterator begin() const noexcept
+ {
+ return Iterator {*this, 0};
+ }
+
+ Iterator end() const noexcept
+ {
+ return Iterator {*this, this->length()};
+ }
+
Shared shared() const noexcept
{
return Shared::createWithRef(*this);
} /* namespace internal */
+template <typename LibLabelArrayT>
+class Labels
+{
+public:
+ explicit Labels(const LibLabelArrayT labels, const std::uint64_t size) :
+ _mLabels {labels}, _mLen {size}
+ {
+ }
+
+ std::uint64_t length() const noexcept
+ {
+ return _mLen;
+ }
+
+ bt2c::CStringView operator[](const std::uint64_t index) const noexcept
+ {
+ return _mLabels[index];
+ }
+
+private:
+ LibLabelArrayT _mLabels;
+ std::uint64_t _mLen;
+};
+
template <typename LibObjT>
class CommonBitArrayField final : public CommonField<LibObjT>
{
return CommonBitArrayField<const bt_field> {*this};
}
- ConstBitArrayFieldClass cls() const noexcept
- {
- return ConstBitArrayFieldClass {
- internal::CommonFieldSpec<const bt_field>::cls(this->libObjPtr())};
- }
-
- Class cls() noexcept
+ Class cls() const noexcept
{
return Class {internal::CommonFieldSpec<LibObjT>::cls(this->libObjPtr())};
}
BT_ASSERT_DBG(index < this->cls().length());
return static_cast<bool>(this->valueAsInteger() & (1ULL << index));
}
+
+ Labels<bt_field_class_bit_array_flag_label_array> activeFlagLabels() const
+ {
+ bt_field_class_bit_array_flag_label_array labelArray;
+ std::uint64_t count;
+
+ if (bt_field_bit_array_get_active_flag_labels(this->libObjPtr(), &labelArray, &count) ==
+ BT_FIELD_BIT_ARRAY_GET_ACTIVE_FLAG_LABELS_STATUS_MEMORY_ERROR) {
+ throw MemoryError {};
+ }
+
+ return Labels<bt_field_class_bit_array_flag_label_array> {labelArray, count};
+ }
};
using BitArrayField = CommonBitArrayField<bt_field>;
} /* namespace internal */
-class EnumerationFieldClassMappingLabels
-{
-public:
- explicit EnumerationFieldClassMappingLabels(
- const bt_field_class_enumeration_mapping_label_array labels, const std::uint64_t size) :
- _mLabels {labels},
- _mLen {size}
- {
- }
-
- std::uint64_t length() const noexcept
- {
- return _mLen;
- }
-
- bt2c::CStringView operator[](const std::uint64_t index) const noexcept
- {
- return _mLabels[index];
- }
-
-private:
- bt_field_class_enumeration_mapping_label_array _mLabels;
- std::uint64_t _mLen;
-};
-
template <typename LibObjT>
class CommonUnsignedEnumerationField final : public CommonUnsignedIntegerField<LibObjT>
{
return Class {internal::CommonFieldSpec<LibObjT>::cls(this->libObjPtr())};
}
- EnumerationFieldClassMappingLabels labels() const
+ Labels<bt_field_class_enumeration_mapping_label_array> labels() const
{
bt_field_class_enumeration_mapping_label_array labelArray;
std::uint64_t count;
throw MemoryError {};
}
- return EnumerationFieldClassMappingLabels {labelArray, count};
+ return Labels<bt_field_class_enumeration_mapping_label_array> {labelArray, count};
}
};
return Class {internal::CommonFieldSpec<LibObjT>::cls(this->libObjPtr())};
}
- EnumerationFieldClassMappingLabels labels() const
+ Labels<bt_field_class_enumeration_mapping_label_array> mappingLabels() const
{
bt_field_class_enumeration_mapping_label_array labelArray;
std::uint64_t count;
throw MemoryError {};
}
- return EnumerationFieldClassMappingLabels {labelArray, count};
+ return Labels<bt_field_class_enumeration_mapping_label_array> {labelArray, count};
}
};