cpp-common: remove unused include
[babeltrace.git] / src / cpp-common / bt2c / c-string-view.hpp
index ddcf36c6df18e2fb3e4cbed693c6bbb39adbf19e..939c8a16455b014d1b5cca10168c75f99af2d7b8 100644 (file)
@@ -13,7 +13,9 @@
 
 #include "common/assert.h"
 #include "cpp-common/bt2s/string-view.hpp"
-#include "cpp-common/vendor/fmt/core.h"
+#include "cpp-common/vendor/fmt/format.h" /* IWYU pragma: keep */
+
+#include "type-traits.hpp"
 
 namespace bt2c {
 
@@ -31,14 +33,23 @@ public:
      *
      * Intentionally not explicit.
      */
-    CStringView() noexcept = default;
+    constexpr CStringView() noexcept = default;
 
     /*
      * Builds a view of the C string `str` (may be `nullptr`).
      *
      * Intentionally not explicit.
      */
-    CStringView(const char * const str) noexcept : _mStr {str}
+    constexpr CStringView(const char * const str) noexcept : _mStr {str}
+    {
+    }
+
+    /*
+     * Builds a view of the string `str`.
+     *
+     * Intentionally not explicit.
+     */
+    CStringView(const std::string& str) noexcept : _mStr {str.c_str()}
     {
     }
 
@@ -169,24 +180,72 @@ private:
     const char *_mStr = nullptr;
 };
 
-} /* namespace bt2c */
+static inline const char *format_as(const CStringView& str)
+{
+    return str ? *str : "(null)";
+}
 
-namespace fmt {
+namespace internal {
 
-template <>
-struct formatter<bt2c::CStringView>
+template <typename StrT>
+const char *asConstCharPtr(StrT&& val) noexcept
 {
-    constexpr auto parse(format_parse_context& ctx) const -> format_parse_context::iterator
-    {
-        return ctx.end();
-    }
+    return val.data();
+}
 
-    auto format(const bt2c::CStringView& str, format_context& ctx) const -> format_context::iterator
-    {
-        return str ? fmt::format_to(ctx.out(), "{}", *str) : fmt::format_to(ctx.out(), "(null)");
-    }
-};
+inline const char *asConstCharPtr(const char * const val) noexcept
+{
+    return val;
+}
+
+template <typename StrT>
+using ComparableWithCStringView =
+    IsOneOf<typename std::decay<StrT>::type, CStringView, std::string, const char *>;
 
-} /* namespace fmt */
+} /* namespace internal */
+
+/*
+ * Returns true if `lhs` is equal to `rhs`.
+ *
+ * `LhsT` and `RhsT` may be any of:
+ *
+ * • `const char *`
+ * • `std::string`
+ * • `CStringView`
+ *
+ * Both `lhs` and `rhs` must not have an underlying `nullptr` raw data.
+ */
+template <
+    typename LhsT, typename RhsT,
+    typename = typename std::enable_if<internal::ComparableWithCStringView<LhsT>::value>::type,
+    typename = typename std::enable_if<internal::ComparableWithCStringView<RhsT>::value>::type>
+bool operator==(LhsT&& lhs, RhsT&& rhs) noexcept
+{
+    const auto rawLhs = internal::asConstCharPtr(lhs);
+    const auto rawRhs = internal::asConstCharPtr(rhs);
+
+    BT_ASSERT_DBG(rawLhs);
+    BT_ASSERT_DBG(rawRhs);
+    return std::strcmp(rawLhs, rawRhs) == 0;
+}
+
+/*
+ * Returns true if `lhs` is not equal to `rhs`.
+ *
+ * `LhsT` and `RhsT` may be any of:
+ *
+ * • `const char *`
+ * • `std::string`
+ * • `CStringView`
+ *
+ * Both `lhs` and `rhs` must not have an underlying `nullptr` raw data.
+ */
+template <typename LhsT, typename RhsT>
+bool operator!=(LhsT&& lhs, RhsT&& rhs) noexcept
+{
+    return !(std::forward<LhsT>(lhs) == std::forward<RhsT>(rhs));
+}
+
+} /* namespace bt2c */
 
 #endif /* BABELTRACE_CPP_COMMON_BT2C_C_STRING_VIEW_HPP */
This page took 0.025153 seconds and 4 git commands to generate.