Move byLine to FileGen.h, add explanatory note
authorTom Jackson <tjackson@fb.com>
Thu, 14 Nov 2013 23:41:09 +0000 (15:41 -0800)
committerPeter Griess <pgriess@fb.com>
Tue, 26 Nov 2013 15:05:17 +0000 (07:05 -0800)
Summary: There's a bit of a gotcha here, let's provide at least a note on this.

Test Plan: Unit tests

Reviewed By: tudorb@fb.com

FB internal diff: D1058244

folly/experimental/FileGen-inl.h
folly/experimental/FileGen.h

index 21b0589c5dc6562346550d9cc3c2c6de5d7f91a6..d28966b76d50f785bb8010e1565360953c0884e1 100644 (file)
@@ -120,13 +120,19 @@ class FileWriter : public Operator<FileWriter> {
   std::unique_ptr<IOBuf> buffer_;
 };
 
-}  // namespace detail
-
-inline auto byLine(File file, char delim='\n') ->
-decltype(fromFile(std::move(file)) | eachAs<StringPiece>() | resplit(delim)) {
-  return fromFile(std::move(file)) | eachAs<StringPiece>() | resplit(delim);
+}  // !detail
+/**
+ * Generator which reads lines from a file.
+ * Note: This produces StringPieces which reference temporary strings which are
+ * only valid during iteration.
+ */
+inline auto byLine(File file, char delim = '\n')
+    -> decltype(fromFile(std::move(file))
+                | eachAs<StringPiece>()
+                | resplit(delim)) {
+  return fromFile(std::move(file))
+       | eachAs<StringPiece>()
+       | resplit(delim);
 }
 
-}  // namespace gen
-}  // namespace folly
-
+}}  // !folly::gen
index 234b0c18fcb72e356cee4a39445b29b555ae10d6..35d98355e2e69ae2abe204f61507a58544e9e817 100644 (file)
@@ -65,8 +65,7 @@ S toFile(File file, std::unique_ptr<IOBuf> buffer) {
   return S(std::move(file), std::move(buffer));
 }
 
-}  // namespace gen
-}  // namespace folly
+}}  // !folly::gen
 
 #include "folly/experimental/FileGen-inl.h"