From e271ad9c781967b01c3f94a93216e099cfd73b36 Mon Sep 17 00:00:00 2001 From: "Adam C. Emerson" Date: Mon, 29 Jan 2018 23:23:14 -0500 Subject: [PATCH] buffer: Append from std::string_view Now that we have std::string_view. Signed-off-by: Adam C. Emerson --- src/include/buffer.h | 25 ++++++++++++++++++++++++- src/test/compressor/test_compression.cc | 4 ++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/include/buffer.h b/src/include/buffer.h index 0d4bc0adf5f62..b59f271135762 100644 --- a/src/include/buffer.h +++ b/src/include/buffer.h @@ -43,6 +43,10 @@ #include #include #include +#if __cplusplus >= 201703L +#include +#endif // __cplusplus >= 201703L + #include #include @@ -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 + 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); diff --git a/src/test/compressor/test_compression.cc b/src/test/compressor/test_compression.cc index a799a93ddd0e7..0802603124c01 100644 --- a/src/test/compressor/test_compression.cc +++ b/src/test/compressor/test_compression.cc @@ -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(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(test)); EXPECT_TRUE(exp.contents_equal(after)); } #endif -- 2.39.5