aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2022-10-27 09:51:03 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2022-10-27 09:51:03 +0200
commit7d7f8a4b8966985da25a5ce72fdddb9e394dca5f (patch)
treeed05ca58e746b8f9f1f068c2d29291b9de97ca43
parent9f90ce8de8865bd111191bf6fd7434ef6d3b75ab (diff)
Add buffer_size constant, blocking() accessor to fdstreambuf
-rw-r--r--libbutl/fdstream.hxx13
-rw-r--r--libbutl/fdstream.ixx2
2 files changed, 14 insertions, 1 deletions
diff --git a/libbutl/fdstream.hxx b/libbutl/fdstream.hxx
index 4dc89a3..730d4dd 100644
--- a/libbutl/fdstream.hxx
+++ b/libbutl/fdstream.hxx
@@ -137,6 +137,11 @@ namespace butl
class LIBBUTL_SYMEXPORT fdstreambuf: public bufstreambuf
{
public:
+ // Reasonable (for stack allocation) buffer size that provides decent
+ // performance.
+ //
+ static const std::size_t buffer_size = 8192;
+
fdstreambuf () = default;
// Unless specified, the current read/write position is assumed to
@@ -174,6 +179,9 @@ namespace butl
bool
blocking (bool);
+ bool
+ blocking () const {return !non_blocking_;}
+
public:
using base = bufstreambuf;
@@ -238,7 +246,7 @@ namespace butl
private:
auto_fd fd_;
- char buf_[8192];
+ char buf_[buffer_size];
bool non_blocking_ = false;
};
@@ -311,6 +319,9 @@ namespace butl
int
fd () const {return buf_.fd ();}
+ bool
+ blocking () const {return buf_.blocking ();}
+
protected:
fdstreambuf buf_;
};
diff --git a/libbutl/fdstream.ixx b/libbutl/fdstream.ixx
index 08e317c..e024af9 100644
--- a/libbutl/fdstream.ixx
+++ b/libbutl/fdstream.ixx
@@ -167,6 +167,8 @@ namespace butl
inline std::vector<char> ifdstream::
read_binary ()
{
+ // @@ TODO: surely there is a more efficient way! See sha256!
+
std::vector<char> v (std::istreambuf_iterator<char> (*this),
std::istreambuf_iterator<char> ());
return v;