This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/Borland/BCC55/Include/fstream.h

432 lines
12 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __FSTREAM_H
#define __FSTREAM_H
#pragma option push -b -a8 -pc -Vx- -Ve- -w-inl -w-aus -w-sig
// -*- C++ -*-
#ifndef __STD_FSTREAM__
#define __STD_FSTREAM__
/***************************************************************************
*
* fstream -- Declarations for the Standard Library file bufs and streams
*
***************************************************************************
*
* Copyright (c) 1994-1999 Rogue Wave Software, Inc. All Rights Reserved.
*
* This computer software is owned by Rogue Wave Software, Inc. and is
* protected by U.S. copyright laws and other laws and by international
* treaties. This computer software is furnished by Rogue Wave Software,
* Inc. pursuant to a written license agreement and may be used, copied,
* transmitted, and stored only in accordance with the terms of such
* license and with the inclusion of the above copyright notice. This
* computer software or any other copies thereof may not be provided or
* otherwise made available to any other person.
*
* U.S. Government Restricted Rights. This computer software is provided
* with Restricted Rights. Use, duplication, or disclosure by the
* Government is subject to restrictions as set forth in subparagraph (c)
* (1) (ii) of The Rights in Technical Data and Computer Software clause
* at DFARS 252.227-7013 or subparagraphs (c) (1) and (2) of the
* Commercial Computer Software Restricted Rights at 48 CFR 52.227-19,
* as applicable. Manufacturer is Rogue Wave Software, Inc., 5500
* Flatiron Parkway, Boulder, Colorado 80301 USA.
*
**************************************************************************/
#include <stdcomp.h>
#include <istream>
#include <ostream>
#include <streambuf>
#ifndef _RWSTD_NO_NEW_HEADER
#include <cstdlib>
#else
#include <stdlib.h>
#endif
#ifndef _RWSTD_STRICT_ANSI
# if defined (_MSC_VER) || defined (__TURBOC__)
# include <io.h>
# else
#ifdef _HPACC_
using std::off_t;
using std::ssize_t;
using std::pid_t;
using std::useconds_t;
using std::mode_t;
#endif
# include <unistd.h>
# endif // defined (_MSC_VER) || defined (__TURBOC__)
# include <fcntl.h>
#else
# ifndef _RWSTD_NO_EXTENSION
# define _RWSTD_NO_EXTENSION 1
# endif
#endif // _RWSTD_STRICT_ANSI
#ifndef _RWSTD_NO_NAMESPACE
namespace __rwstd {
#endif
#ifndef _RWSTD_STRICT_ANSI
extern const int _RWSTDExport __rwOpenTable[32];
#else
extern const char _RWSTDExportFunc(*) __rwOpenTable[32];
#endif
#ifndef _RWSTD_NO_NAMESPACE
} namespace std {
#endif
/*
* Class basic_filebuf
*/
template<class charT, class traits>
class _RWSTDExportTemplate basic_filebuf : public basic_streambuf<charT, traits> {
#ifndef _RWSTD_STRICT_ANSI
typedef int __file_type;
#else
typedef FILE* __file_type;
#endif
typedef basic_ios<charT, traits> ios_type;
typedef _TYPENAME traits::state_type state_t;
public:
//
// Types:
//
typedef charT char_type;
typedef _TYPENAME traits::int_type int_type;
typedef _TYPENAME traits::pos_type pos_type;
typedef _TYPENAME traits::off_type off_type;
typedef traits traits_type;
basic_filebuf();
virtual ~basic_filebuf();
bool is_open() const;
basic_filebuf<charT, traits> *
open(const char *s, ios_base::openmode, long protection = 0666 );
basic_filebuf<charT, traits> *close();
basic_filebuf(__file_type fd);
#ifndef _RWSTD_NO_EXTENSION
basic_filebuf<charT, traits> *open(int fd);
int fd() const { return __file;}
#endif //_RWSTD_NO_EXTENSION
protected:
virtual streamsize showmanyc();
virtual int_type underflow();
virtual int_type overflow(int_type c = traits::eof());
virtual int_type pbackfail(int_type c = traits::eof());
virtual basic_streambuf<charT,traits>*
setbuf(char_type *s,streamsize n);
virtual pos_type seekoff(off_type off,
ios_base::seekdir way,
ios_base::openmode which =
ios_base::in | ios_base::out);
virtual pos_type seekpos(pos_type sp,
ios_base::openmode which =
ios_base::in | ios_base::out);
virtual int sync( );
virtual streamsize xsputn(const char_type *s, streamsize n);
private:
// Deal with CR/LF translation on win32
off_type __get_chars(charT* start, charT* finish)
{
#ifndef __WIN32__
return finish-start;
#else
if (mode_ & ios_base::binary)
return finish-start;
#ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE
charT eol = use_facet< ctype<charT> >(this->getloc()).widen('\n');
#else
charT eol = use_facet( this->getloc(), (ctype<charT>* )0).widen('\n');
#endif
off_type n=0;
while (start != finish)
{
if (*start++ == eol)
n+=2;
else
++n;
}
return n;
#endif // __WIN32__
}
off_type __file_seek(__file_type f, long offset, int origin)
{
#ifndef _RWSTD_STRICT_ANSI
return lseek(f, offset, origin);
#else
fseek(f, offset, origin);
return ftell(f);
#endif // _RWSTD_STRICT_ANSI
}
int __file_close(__file_type f)
{
#ifndef _RWSTD_STRICT_ANSI
return ::close(f);
#else
return fclose(f);
#endif // _RWSTD_STRICT_ANSI
}
bool __file_write(__file_type f, const char* buffer, size_t size, size_t count)
{
#ifndef _RWSTD_STRICT_ANSI
return (size_t) ::write(f,buffer,size*count) == size*count ? true : false;
#else
return fwrite(buffer,size,count,f) == count ? true : false;
#endif // _RWSTD_STRICT_ANSI
}
size_t __file_read(__file_type f, char* buffer, size_t size, size_t count)
{
#ifndef _RWSTD_STRICT_ANSI
int n = ::read(f,buffer,size*count);
return n < 0 ? 0 : (size_t)n;
#else
return fread(buffer,size,count,f)*size;
#endif
}
__file_type __closed()
{
#ifndef _RWSTD_STRICT_ANSI
return -1;
#else
return 0;
#endif
}
bool __file_is_std(__file_type f)
{
#ifndef _RWSTD_STRICT_ANSI
return f < 3;
#else
return (f == stdin || f == stdout || f == stderr);
#endif
}
__file_type __file;
bool __read_buff;
bool __write_buff;
streamsize __last_numb_read;
streamsize __rwBufferSize;
streamsize __absolute_pos;
state_t *__state_beg;
state_t *__state_end;
char_type *__data;
};
template<class charT, class traits>
class _RWSTDExportTemplate basic_ifstream : public basic_istream<charT, traits> {
public:
//
// Types:
//
typedef charT char_type;
typedef _TYPENAME traits::int_type int_type;
typedef _TYPENAME traits::pos_type pos_type;
typedef _TYPENAME traits::off_type off_type;
typedef traits traits_type;
typedef basic_ios<charT, traits> ios_type;
public:
basic_ifstream();
_EXPLICIT basic_ifstream(const char *s,
ios_base::openmode mode = ios_base::in,
long protection = 0666 );
#ifndef _RWSTD_NO_EXTENSION
_EXPLICIT basic_ifstream(int fd);
basic_ifstream(int fd, char_type *buf, int len);
#endif //_RWSTD_NO_EXTENSION
virtual ~basic_ifstream();
basic_filebuf<charT, traits> *rdbuf() const;
bool is_open();
void open(const char *s, ios_base::openmode mode = ios_base::in,
long protection = 0666 );
void close();
protected:
private:
basic_filebuf<charT, traits> __fb;
};
template<class charT, class traits>
class _RWSTDExportTemplate basic_ofstream : public basic_ostream<charT, traits> {
public:
//
//Types:
//
typedef charT char_type;
typedef _TYPENAME traits::int_type int_type;
typedef _TYPENAME traits::pos_type pos_type;
typedef _TYPENAME traits::off_type off_type;
typedef traits traits_type;
typedef basic_ios<charT, traits> ios_type;
public:
basic_ofstream();
_EXPLICIT basic_ofstream(const char *s, ios_base::openmode mode =
ios_base::out,
long protection = 0666 );
#ifndef _RWSTD_NO_EXTENSION
_EXPLICIT basic_ofstream(int fd);
basic_ofstream(int fd, char_type *buf, int len);
#endif //_RWSTD_NO_EXTENSION
virtual ~basic_ofstream();
basic_filebuf<charT, traits> *rdbuf() const;
bool is_open();
void open(const char *s, ios_base::openmode mode =
ios_base::out,
long protection = 0666 );
void close();
protected:
private:
basic_filebuf<charT, traits> __fb;
};
/*
* Class basic_fstream
*/
template<class charT, class traits>
class _RWSTDExportTemplate basic_fstream : public basic_iostream<charT, traits> {
public:
//
// Types:
//
typedef charT char_type;
typedef _TYPENAME traits::int_type int_type;
typedef _TYPENAME traits::pos_type pos_type;
typedef _TYPENAME traits::off_type off_type;
typedef traits traits_type;
typedef basic_ios<charT, traits> ios_type;
basic_fstream();
_EXPLICIT basic_fstream(const char *s, ios_base::openmode mode =
ios_base::in | ios_base::out,
long protection= 0666 );
#ifndef _RWSTD_NO_EXTENSION
_EXPLICIT basic_fstream(int fd);
basic_fstream(int fd, char_type *buf, int len);
#endif //_RWSTD_NO_EXTENSION
virtual ~basic_fstream();
basic_filebuf<charT, traits> *rdbuf() const;
bool is_open();
void open(const char *s, ios_base::openmode mode =
ios_base::in | ios_base::out,
long protection = 0666 );
void close();
protected:
private:
basic_filebuf<charT, traits> __fb;
};
#ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
typedef basic_filebuf<char> filebuf;
#else
typedef basic_filebuf<char, char_traits<char> > filebuf;
#endif // _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
#ifndef _RWSTD_NO_WIDE_CHAR
#ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
typedef basic_filebuf<wchar_t> wfilebuf;
#else
typedef basic_filebuf<wchar_t, char_traits<wchar_t> > wfilebuf;
#endif // _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
#endif // _RWSTD_NO_WIDE_CHAR
#ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
typedef basic_ifstream<char> ifstream;
#else
typedef basic_ifstream<char, char_traits<char> > ifstream;
#endif // _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
#ifndef _RWSTD_NO_WIDE_CHAR
#ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
typedef basic_ifstream<wchar_t> wifstream;
#else
typedef basic_ifstream<wchar_t, char_traits<wchar_t> > wifstream;
#endif // _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
#endif // _RWSTD_NO_WIDE_CHAR
#ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
typedef basic_ofstream<char> ofstream;
#else
typedef basic_ofstream<char, char_traits<char> > ofstream;
#endif // _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
#ifndef _RWSTD_NO_WIDE_CHAR
#ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
typedef basic_ofstream<wchar_t> wofstream;
#else
typedef basic_ofstream<wchar_t, char_traits<wchar_t> > wofstream;
#endif // _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
#endif // _RWSTD_NO_WIDE_CHAR
#ifndef _RWSTD_NO_DEFAULT_TEMPLATES
typedef basic_fstream<char> fstream;
#else
typedef basic_fstream<char, char_traits<char> > fstream;
#endif // _RWSTD_NO_DEFAULT_TEMPLATES
#ifndef _RWSTD_NO_WIDE_CHAR
#ifndef _RWSTD_NO_DEFAULT_TEMPLATES
typedef basic_fstream<wchar_t> wfstream;
#else
typedef basic_fstream<wchar_t, char_traits<wchar_t> > wfstream;
#endif // _RWSTD_NO_DEFAULT_TEMPLATES
#endif // _RWSTD_NO_WIDE_CHAR
#ifndef _RWSTD_NO_NAMESPACE
}
#endif
#ifdef _RWSTD_COMPILE_INSTANTIATE
#include <fstream.cc>
#endif
#endif //__STD_FSTREAM__
#ifndef __USING_STD_NAMES__
using namespace std;
#endif
#pragma option pop
#endif /* __FSTREAM_H */