cpp-common/bt2/field{,-class}.hpp: adapt to latest libbabeltrace2 API
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Mon, 18 Mar 2024 21:19:57 +0000 (17:19 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Wed, 4 Sep 2024 19:05:14 +0000 (15:05 -0400)
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ia4dbbd5c35a482e3dff634d8e99192b0d1c08784
Reviewed-on: https://review.lttng.org/c/babeltrace/+/12731

src/cpp-common/bt2/field-class.hpp
src/cpp-common/bt2/field.hpp

index 6ba39aa4046d41e957ed80be371cbed321d9bf21..722c729f2c674c242ecb5efa41ee7cb7308d8a38 100644 (file)
@@ -492,6 +492,28 @@ struct TypeDescr<ConstFieldClass> : public FieldClassTypeDescr
 
 } /* 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>
 {
@@ -501,6 +523,7 @@ private:
 public:
     using typename CommonFieldClass<LibObjT>::LibObjPtr;
     using Shared = SharedFieldClass<CommonBitArrayFieldClass<LibObjT>, LibObjT>;
+    using Iterator = BorrowedObjectIterator<CommonBitArrayFieldClass>;
 
     explicit CommonBitArrayFieldClass(const LibObjPtr libObjPtr) noexcept :
         _ThisCommonFieldClass {libObjPtr}
@@ -532,6 +555,42 @@ public:
         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);
index a75a054e450c6d36843c14ee0ed645d048172dde..8b291f7a19dbfd117e35e48b53688bc1ab060477 100644 (file)
@@ -344,6 +344,30 @@ struct TypeDescr<ConstBoolField> : public BoolFieldTypeDescr
 
 } /* 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>
 {
@@ -377,13 +401,7 @@ public:
         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())};
     }
@@ -407,6 +425,19 @@ public:
         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>;
@@ -606,31 +637,6 @@ struct TypeDescr<ConstSignedIntegerField> : public SignedIntegerFieldTypeDescr
 
 } /* 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>
 {
@@ -674,7 +680,7 @@ public:
         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;
@@ -685,7 +691,7 @@ public:
             throw MemoryError {};
         }
 
-        return EnumerationFieldClassMappingLabels {labelArray, count};
+        return Labels<bt_field_class_enumeration_mapping_label_array> {labelArray, count};
     }
 };
 
@@ -754,7 +760,7 @@ public:
         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;
@@ -765,7 +771,7 @@ public:
             throw MemoryError {};
         }
 
-        return EnumerationFieldClassMappingLabels {labelArray, count};
+        return Labels<bt_field_class_enumeration_mapping_label_array> {labelArray, count};
     }
 };
 
This page took 0.027768 seconds and 4 git commands to generate.