/*
- * Copyright 2017 Facebook, Inc.
+ * Copyright 2014-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
std::unique_ptr<IOBuf> buffer_;
};
-} // !detail
+inline auto byLineImpl(File file, char delim, bool keepDelimiter)
+ -> decltype(fromFile(std::move(file))
+ | eachAs<StringPiece>()
+ | resplit(delim, keepDelimiter)) {
+ return fromFile(std::move(file))
+ | eachAs<StringPiece>()
+ | resplit(delim, keepDelimiter);
+}
+
+} // namespace detail
/**
* Generator which reads lines from a file.
* Note: This produces StringPieces which reference temporary strings which are
* only valid during iteration.
*/
+inline auto byLineFull(File file, char delim = '\n')
+ -> decltype(detail::byLineImpl(std::move(file), delim, true)) {
+ return detail::byLineImpl(std::move(file), delim, true);
+}
+
+inline auto byLineFull(int fd, char delim = '\n')
+ -> decltype(byLineFull(File(fd), delim)) {
+ return byLineFull(File(fd), delim);
+}
+
+inline auto byLineFull(const char* f, char delim = '\n')
+ -> decltype(byLineFull(File(f), delim)) {
+ return byLineFull(File(f), delim);
+}
+
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);
+ -> decltype(detail::byLineImpl(std::move(file), delim, false)) {
+ return detail::byLineImpl(std::move(file), delim, false);
}
inline auto byLine(int fd, char delim = '\n')
inline auto byLine(const char* f, char delim = '\n')
-> decltype(byLine(File(f), delim)) { return byLine(File(f), delim); }
-
-}} // !folly::gen
+} // namespace gen
+} // namespace folly