aboutsummaryrefslogtreecommitdiff
path: root/libbutl/fdstream.ixx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2017-05-30 19:05:43 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2017-05-31 00:51:43 +0300
commitc7ec29b2d6a66700933ede6ae2371e1d54744d67 (patch)
tree119ff80f333892422e99cd352c99702f0ae7eb7c /libbutl/fdstream.ixx
parent95ff8f359cfc2189bd4d7e02e15373027d2bda32 (diff)
Add ifdstream::read_text() and ifdstream::read_binary()
Diffstat (limited to 'libbutl/fdstream.ixx')
-rw-r--r--libbutl/fdstream.ixx23
1 files changed, 23 insertions, 0 deletions
diff --git a/libbutl/fdstream.ixx b/libbutl/fdstream.ixx
index a877699..5181903 100644
--- a/libbutl/fdstream.ixx
+++ b/libbutl/fdstream.ixx
@@ -3,6 +3,7 @@
// license : MIT; see accompanying LICENSE file
#include <cassert>
+#include <iterator>
namespace butl
{
@@ -118,6 +119,28 @@ namespace butl
return buf_.release ();
}
+ inline std::string ifdstream::
+ read_text ()
+ {
+ std::string s;
+
+ // Note that the eof check is important: if the stream is at eof (empty
+ // file) then getline() will fail.
+ //
+ if (peek () != traits_type::eof ())
+ butl::getline (*this, s, '\0'); // Hidden by istream::getline().
+
+ return s;
+ }
+
+ inline std::vector<char> ifdstream::
+ read_binary ()
+ {
+ std::vector<char> v (std::istreambuf_iterator<char> (*this),
+ std::istreambuf_iterator<char> ());
+ return v;
+ }
+
// ofdstream
//
inline ofdstream::