From 76d60885da567e2ae9e4cc454bb8eefe869f8943 Mon Sep 17 00:00:00 2001 From: Tom Jackson Date: Wed, 13 Mar 2013 13:56:29 -0700 Subject: [PATCH] Fix unsplit(", ") MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Summary: Otherwise you get errors like `error: array used as initializer ./folly/experimental/StringGen-inl.h: In constructor ‘folly::gen::detail::UnsplitBuffer::UnsplitBuffer(const Delimiter&, OutputBuffer*) [with Delimiter = char [3] ...]`, since literal strings bind as reference to fixed-length character arrays. Providing an explicit overload for `const char*` fixes this. Test Plan: Unit tests Reviewed By: tulloch@fb.com FB internal diff: D737117 --- folly/experimental/StringGen.h | 12 ++++++++++++ folly/experimental/test/GenTest.cpp | 11 ++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/folly/experimental/StringGen.h b/folly/experimental/StringGen.h index aed03c59..14e5115d 100644 --- a/folly/experimental/StringGen.h +++ b/folly/experimental/StringGen.h @@ -73,6 +73,12 @@ Unsplit unsplit(const Delimiter& delimiter) { return Unsplit(delimiter); } +template> +Unsplit unsplit(const char* delimiter) { + return Unsplit(delimiter); +} + /* * Joins a sequence of tokens into a string, appending them to the output * buffer. If the output buffer is empty, an initial delimiter will not be @@ -94,6 +100,12 @@ UnsplitBuffer unsplit(const Delimiter& delimiter, OutputBuffer* outputBuffer) { return UnsplitBuffer(delimiter, outputBuffer); } +template> +UnsplitBuffer unsplit(const char* delimiter, OutputBuffer* outputBuffer) { + return UnsplitBuffer(delimiter, outputBuffer); +} + } // namespace gen } // namespace folly diff --git a/folly/experimental/test/GenTest.cpp b/folly/experimental/test/GenTest.cpp index 4e08fbd0..651dc395 100644 --- a/folly/experimental/test/GenTest.cpp +++ b/folly/experimental/test/GenTest.cpp @@ -753,18 +753,27 @@ TEST(StringGen, Unsplit) { split(s, ',') | unsplit(',', &buffer); auto expected = folly::to( "asdf", s.empty() ? "" : ",", s); - EXPECT_EQ(buffer, expected); + EXPECT_EQ(expected, buffer); }; auto emptyBuffer = [](const StringPiece& s) { std::string buffer; split(s, ',') | unsplit(',', &buffer); + EXPECT_EQ(s, buffer); + }; + + auto stringDelim = [](const StringPiece& s) { + EXPECT_EQ(s, split(s, ',') | unsplit(",")); + std::string buffer; + split(s, ',') | unsplit(",", &buffer); EXPECT_EQ(buffer, s); }; runUnsplitSuite(basicFn); runUnsplitSuite(existingBuffer); runUnsplitSuite(emptyBuffer); + runUnsplitSuite(stringDelim); + EXPECT_EQ("1, 2, 3", seq(1, 3) | unsplit(", ")); } TEST(FileGen, ByLine) { -- 2.34.1