]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/string_view.h
Merge commit 'e2073b0276226b625897ef475f225bf8f508719e' as 'triehash'
[apt.git] / apt-pkg / contrib / string_view.h
index ea38224e888f62b08f4d8b3850fe76fae8105789..f158ef8d6c84da6fa5e41f29359def01c7ceb91e 100644 (file)
@@ -13,6 +13,7 @@
 #define APT_STRINGVIEW_H
 #include <string.h>
 #include <string>
+#include <apt-pkg/macros.h>
 
 namespace APT {
 
@@ -23,14 +24,10 @@ namespace APT {
  * used by APT. It is not meant to be used in programs, only inside the
  * library for performance critical paths.
  */
-class StringView {
+class APT_HIDDEN StringView {
     const char *data_;
     size_t size_;
 
-    // without this little stunt the "char const *" overload is always preferred
-    // over char[], but if we got a char[] we can deduct the length at compile time
-    #define APT_T_IS_CHARPOINTER template<class T, typename std::enable_if<std::is_pointer<T>{} && !std::is_array<T>{}>::type* = nullptr>
-
 public:
     static constexpr size_t npos = static_cast<size_t>(-1);
     static_assert(APT::StringView::npos == std::string::npos, "npos values are different");
@@ -39,11 +36,10 @@ public:
     constexpr StringView() : data_(""), size_(0) {}
     constexpr StringView(const char *data, size_t size) : data_(data), size_(size) {}
 
-    template<size_t N> constexpr StringView(char const (&data)[N]) : StringView(data, N-1) {}
-    APT_T_IS_CHARPOINTER StringView(T data) : data_(data), size_(strlen(data)) {}
-
+    StringView(const char *data) : data_(data), size_(strlen(data)) {}
     StringView(std::string const & str): data_(str.data()), size_(str.size()) {}
 
+
     /* Viewers */
     constexpr StringView substr(size_t pos, size_t n = npos) const {
         return StringView(data_ + pos, n > (size_ - pos) ? (size_ - pos) : n);
@@ -119,8 +115,7 @@ public:
 
 }
 
-template<size_t N> inline bool operator ==(char const (&other)[N], APT::StringView that) { return that.operator==(other); }
-APT_T_IS_CHARPOINTER inline bool operator ==(T other, APT::StringView that) { return that.operator==(other); }
+inline bool operator ==(const char *other, APT::StringView that);
+inline bool operator ==(const char *other, APT::StringView that) { return that.operator==(other); }
 
-#undef APT_T_IS_CHARPOINTER
 #endif