Add a mode parameter to Memory constructor with non-const pointers
authorMikko Rasa <tdb@tdb.fi>
Thu, 27 Sep 2012 20:41:20 +0000 (23:41 +0300)
committerMikko Rasa <tdb@tdb.fi>
Thu, 27 Sep 2012 20:41:20 +0000 (23:41 +0300)
This makes it possible to explicitly set the mode for a Memory, and in
particular to create a write-only Memory.  ZlibCompressed does not work
with M_RDWR so writing compressed data to memory was impossible before
this commit.

source/io/memory.cpp
source/io/memory.h

index 274f6bae91c1a6a1d53f67be3872319bdae85bc2..bc14ff1fd4e832967b93f346a7fd4de29c74f552 100644 (file)
@@ -8,14 +8,14 @@ using namespace std;
 namespace Msp {
 namespace IO {
 
-Memory::Memory(char *d, unsigned s)
+Memory::Memory(char *d, unsigned s, Mode m)
 {
-       init(d, d+s, M_RDWR);
+       init(d, d+s, m);
 }
 
-Memory::Memory(char *b, char *e)
+Memory::Memory(char *b, char *e, Mode m)
 {
-       init(b, e, M_RDWR);
+       init(b, e, m);
 }
 
 Memory::Memory(const char *cd, unsigned s)
@@ -49,6 +49,8 @@ unsigned Memory::do_write(const char *buf, unsigned size)
 
 unsigned Memory::do_read(char *buf, unsigned size)
 {
+       check_access(M_READ);
+
        if(pos==end)
        {
                set_eof();
@@ -70,6 +72,8 @@ unsigned Memory::put(char c)
 
 bool Memory::getline(string &line)
 {
+       check_access(M_READ);
+
        if(pos==end)
        {
                set_eof();
@@ -84,6 +88,8 @@ bool Memory::getline(string &line)
 
 int Memory::get()
 {
+       check_access(M_READ);
+
        if(pos==end)
        {
                set_eof();
index 809c372ff2dcb56d2b4f75a7aa90b6b7fe433c0b..4ae8eec0d7645ddde6014deaf0acb9338e91d322 100644 (file)
@@ -14,8 +14,8 @@ private:
        char *pos;
 
 public:
-       Memory(char *, unsigned);
-       Memory(char *, char *);
+       Memory(char *, unsigned, Mode = M_RDWR);
+       Memory(char *, char *, Mode = M_RDWR);
        Memory(const char *, unsigned);
        Memory(const char *, const char *);
 private: