MyraMath
ByteStreams.h
Go to the documentation of this file.
1 // ========================================================================= //
2 // This file is part of MyraMath, copyright (c) 2014-2019 by Ryan A Chilton //
3 // and distributed by MyraCore, LLC. See LICENSE.txt for license terms. //
4 // ========================================================================= //
5 
6 #ifndef MYRAMATH_IO_BYTESTREAMS_H
7 #define MYRAMATH_IO_BYTESTREAMS_H
8 
14 #include <myramath/io/Streams.h>
15 #include <stdexcept>
16 
17 namespace myra {
18 
21  {
22  public:
23 
25  ByteOutputStream(char* in_buffer, size_t in_N)
26  : buffer(in_buffer), N(in_N) { }
27 
29  virtual void write_binary (const char* p, size_t n)
30  {
31  if (n > N)
32  throw std::runtime_error("ByteOutputStream::write_binary(), buffer overrun.");
33  N -= n;
34  while (n--)
35  *buffer++ = *p++;
36  }
37 
39  size_t remaining() const
40  { return N; }
41 
42  private:
43 
44  // Pointer to underlying storage (write-only)
45  char* buffer;
46  size_t N;
47 
48  };
49 
52  {
53  public:
54 
56  ByteInputStream(const char* in_buffer, size_t in_N)
57  : buffer(in_buffer), N(in_N) { }
58 
60  virtual void read_binary (char* p, size_t n)
61  {
62  if (n > N)
63  throw std::runtime_error("ByteInputStream::read_binary(), buffer overrun.");
64  N -= n;
65  while (n--)
66  *p++ = *buffer++;
67  }
68 
70  size_t remaining() const
71  { return N; }
72 
73  private:
74 
75  // Pointer to underlying storage (read-only)
76  const char* buffer;
77  size_t N;
78 
79  };
80 
81 } // namespace
82 
83 #endif
ByteInputStream(const char *in_buffer, size_t in_N)
Constructor, wraps a const char* buffer of size N.
Definition: ByteStreams.h:56
size_t remaining() const
Returns how many unread bytes still remain.
Definition: ByteStreams.h:70
An InputStream that thinly wraps a const char* buffer.
Definition: ByteStreams.h:51
Definition: syntax.dox:1
Abstraction layer, serializable objects write themselves to these.
Definition: Streams.h:39
Abstraction layer, deserializable objects read themselves from these.
Definition: Streams.h:47
size_t remaining() const
Returns how many unwritten bytes still remain.
Definition: ByteStreams.h:39
ByteOutputStream(char *in_buffer, size_t in_N)
Constructor, wraps a char* buffer of size N.
Definition: ByteStreams.h:25
virtual void read_binary(char *p, size_t n)
Reads n bytes from buffer, writing into p. Throws if total number of bytes exceeds N (overrun)...
Definition: ByteStreams.h:60
virtual void write_binary(const char *p, size_t n)
Writes n bytes into buffer, reading from p. Throws it total number of bytes exceeds N (overrun)...
Definition: ByteStreams.h:29
An OutputStream that thinly wraps a char* buffer.
Definition: ByteStreams.h:20
Bases classes for binary input/output streams.