#ifndef INCLUDED_BOBCAT_MEMORYSTREAM_
#define INCLUDED_BOBCAT_MEMORYSTREAM_

#include <iosfwd>
#include <iostream>

#include <bobcat/memorybuf>

namespace FBB
{

struct MemoryStream: private MemoryBuf, public std::iostream
{
    using MemoryBuf::id;
    using MemoryBuf::info;
    using MemoryBuf::maxEnd; 
    using MemoryBuf::truncate; 
    using std::iostream::exceptions;
    
    MemoryStream();                                                     // 1

    MemoryStream(std::string const &bufSize, bool erase,                // 2
            std::ios::openmode openMode = std::ios::in | std::ios::out,
            size_t access = 0600);

    MemoryStream(std::string const &bufSize,                            // .f
            std::ios::openmode openMode = std::ios::in | std::ios::out,
            size_t access = 0600);

    MemoryStream(int id, bool erase,                                   // 3
            std::ios::openmode openMode = std::ios::in | std::ios::out);

    MemoryStream(int id,                                                // .f
            std::ios::openmode openMode = std::ios::in | std::ios::out);

    void open(char const *bufSize, bool erase,                         // .f
            std::ios::openmode openMode = std::ios::in | std::ios::out,
            size_t access = 0600);

    void open(char const *bufSize,                                       // .f
            std::ios::openmode openMode = std::ios::in | std::ios::out,
            size_t access = 0600);

    void open(int id, bool erase,                                       // .f
            std::ios::openmode openMode = std::ios::in | std::ios::out);

    void open(int id,                                                    // .f
            std::ios::openmode openMode = std::ios::in | std::ios::out);

    void setErase(bool erase);                                         // .f
};

#include "memorystream.f"

} // FBB
#endif







