From: Tom Jackson Date: Wed, 13 Mar 2013 20:56:29 +0000 (-0700) Subject: Fix unsplit(", ") X-Git-Tag: v0.22.0~1037 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=76d60885da567e2ae9e4cc454bb8eefe869f8943;p=folly.git Fix unsplit(", ") 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 --- 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) {