// File:       fstream.c++
// Version:    1.00
// Author:     (c) Miles Sabin, 1997
// Purpose:    approximation to ANSI C++ fstream

// Change log:
//  22/02/97   v. 1.00
//  30/03/97   Added basic_fstream_char.

#include "fstream.h"

#include "newcasts.h"


// Implementation of basic_filebuf_char

basic_filebuf_char::basic_filebuf_char()
  {}

basic_filebuf_char::~basic_filebuf_char()
  {}


// Implementation of basic_ifstream_char

basic_ifstream_char::basic_ifstream_char()
  : basic_istream_char(&sb_)
  {}

basic_ifstream_char::basic_ifstream_char(char const* s, ios_base::openmode mode)
  : basic_istream_char(&sb_)
  {
    if(rdbuf()->open(s, mode) == 0)
      setstate(failbit);
  }

basic_ifstream_char::~basic_ifstream_char()
  {}

basic_filebuf_char* basic_ifstream_char::rdbuf() const
  { return const_cast(basic_filebuf_char*, &sb_); }

bool basic_ifstream_char::is_open()
  { return rdbuf()->is_open(); }

void basic_ifstream_char::open(char const* s, ios_base::openmode mode)
  {
    if(rdbuf()->open(s, mode) == 0)
      setstate(failbit);
  }

void basic_ifstream_char::close()
  {
    if(rdbuf()->close() == 0)
      setstate(failbit);
  }


// Implementation of basic_ofstream_char

basic_ofstream_char::basic_ofstream_char()
  : basic_ostream_char(&sb_)
  {}

basic_ofstream_char::basic_ofstream_char(char const* s, ios_base::openmode mode)
  : basic_ostream_char(&sb_)
  {
    if(rdbuf()->open(s, mode) == 0)
      setstate(failbit);
  }

basic_ofstream_char::~basic_ofstream_char()
  {}

basic_filebuf_char* basic_ofstream_char::rdbuf() const
  { return const_cast(basic_filebuf_char*, &sb_); }

bool basic_ofstream_char::is_open()
  { return rdbuf()->is_open(); }

void basic_ofstream_char::open(char const* s, ios_base::openmode mode)
  {
    if(rdbuf()->open(s, mode) == 0)
      setstate(failbit);
  }

void basic_ofstream_char::close()
  {
    if(rdbuf()->close() == 0)
      setstate(failbit);
  }


// Implementation of basic_fstream_char

basic_fstream_char::basic_fstream_char()
  : basic_iostream_char(&sb_)
  {}

basic_fstream_char::basic_fstream_char(char const* s, ios_base::openmode mode)
  : basic_iostream_char(&sb_)
  {
    if(rdbuf()->open(s, mode) == 0)
      setstate(failbit);
  }

basic_fstream_char::~basic_fstream_char()
  {}

basic_filebuf_char* basic_fstream_char::rdbuf() const
  { return const_cast(basic_filebuf_char*, &sb_); }

bool basic_fstream_char::is_open()
  { return rdbuf()->is_open(); }

void basic_fstream_char::open(char const* s, ios_base::openmode mode)
  {
    if(rdbuf()->open(s, mode) == 0)
      setstate(failbit);
  }

void basic_fstream_char::close()
  {
    if(rdbuf()->close() == 0)
      setstate(failbit);
  }
