]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
buffer: Append from std::string_view
authorAdam C. Emerson <aemerson@redhat.com>
Tue, 30 Jan 2018 04:23:14 +0000 (23:23 -0500)
committerAdam C. Emerson <aemerson@redhat.com>
Fri, 16 Feb 2018 03:57:20 +0000 (22:57 -0500)
Now that we have std::string_view.

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
src/include/buffer.h
src/test/compressor/test_compression.cc

index 0d4bc0adf5f621c280de2aaf80b15973e07a5c8c..b59f271135762b85bdefefbbcd7bbd956911bab9 100644 (file)
 #include <list>
 #include <vector>
 #include <string>
+#if __cplusplus >= 201703L
+#include <string_view>
+#endif // __cplusplus >= 201703L
+
 #include <exception>
 #include <type_traits>
 
@@ -334,6 +338,11 @@ namespace buffer CEPH_BUFFER_API {
 
     unsigned append(char c);
     unsigned append(const char *p, unsigned l);
+#if __cplusplus >= 201703L
+    inline unsigned append(std::string_view s) {
+      return append(s.data(), s.length());
+    }
+#endif // __cplusplus >= 201703L
     void copy_in(unsigned o, unsigned l, const char *src);
     void copy_in(unsigned o, unsigned l, const char *src, bool crc_reset);
     void zero();
@@ -844,9 +853,23 @@ namespace buffer CEPH_BUFFER_API {
 
     void append(char c);
     void append(const char *data, unsigned len);
-    void append(const std::string& s) {
+    void append(std::string s) {
+      append(s.data(), s.length());
+    }
+#if __cplusplus >= 201703L
+    // To forcibly disambiguate between string and string_view in the
+    // case of arrays
+    template<std::size_t N>
+    void append(const char (&s)[N]) {
+      append(s, N);
+    }
+    void append(const char* s) {
+      append(s, strlen(s));
+    }
+    void append(std::string_view s) {
       append(s.data(), s.length());
     }
+#endif // __cplusplus >= 201703L
     void append(const ptr& bp);
     void append(ptr&& bp);
     void append(const ptr& bp, unsigned off, unsigned len);
index a799a93ddd0e7700bcd1e2db12410f07706c70d8..0802603124c01a1a37ca229cb05d78e4150368dc 100644 (file)
@@ -366,7 +366,7 @@ TEST(ZlibCompressor, zlib_isal_compatibility)
   res = zlib->decompress(out, after);
   EXPECT_EQ(res, 0);
   bufferlist exp;
-  exp.append(test);
+  exp.append(static_cast<char*>(test));
   EXPECT_TRUE(exp.contents_equal(after));
   after.clear();
   out.clear();
@@ -376,7 +376,7 @@ TEST(ZlibCompressor, zlib_isal_compatibility)
   EXPECT_EQ(res, 0);
   res = isal->decompress(out, after);
   EXPECT_EQ(res, 0);
-  exp.append(test);
+  exp.append(static_cast<char*>(test));
   EXPECT_TRUE(exp.contents_equal(after));
 }
 #endif