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/dm/include/strstream.h

153 lines
3.3 KiB
C++

#if __SC__ || __RCC__
#pragma once
#endif
#ifndef _STRSTREAM_H_
#define _STRSTREAM_H_
#ifndef __cplusplus
#error Use C++ compiler for strstrea.h
#endif
/*
* strstream.h -- class strstream declarations
*
* $Id: strstrea.h,v 1.1.1.1 1997/01/02 19:16:44 smarx Exp $
*
****************************************************************************
*
* Rogue Wave Software, Inc.
* P.O. Box 2328
* Corvallis, OR 97339
* Voice: (503) 754-3010 FAX: (503) 757-6650
*
* Copyright (C) 1991, 1993, 1994.
* This software is subject to copyright protection under the laws of
* the United States and other countries.
* ALL RIGHTS RESERVED
*
***************************************************************************
*
* $Log: strstrea.h,v $
* Revision 1.1.1.1 1997/01/02 19:16:44 smarx
* cafe12
*
// *
// * 5 2/26/96 8:05a Smarx
*
* Rev 1.3 24 May 1995 15:42:34 Andrew
* Fixed problem where structs/classes were not in pragma pack(__DEFALIGN)
*
* Rev 1.2 08 Oct 1994 14:11:54 BUSHNELL
* Added pragma once for faster compilations
*
* Rev 1.1 02 Jun 1994 21:35:44 bushnell
* added ifdef so that MS RC will not include header twice
*
* Rev 1.0 28 Apr 1994 19:19:44 thompson
* Initial revision.
*
* Rev 1.0 20 Apr 1994 17:46:36 thompson
* Initial revision.
* Revision 1.1 1994/04/14 16:57:40 vriezen
* Initial revision
*
* Revision 1.2 1994/04/14 00:50:17 vriezen
* Updated copywrite, added ID and LOG and changed comments to indicate .cpp filename
*
*
*
*/
#include <iostream.h>
#pragma pack(__DEFALIGN)
class strstreambuf : public streambuf {
public:
strstreambuf();
strstreambuf(int n);
strstreambuf(void* (*a)(long), void (*f)(void*));
strstreambuf(char* _s, int, char* _strt=0);
~strstreambuf();
void freeze(int = 1);
int isfrozen();
char* str();
virtual int doallocate();
virtual int overflow(int);
virtual int underflow();
virtual streambuf* setbuf(char*, int);
virtual streampos seekoff(streamoff, ios::seek_dir, int);
private:
void* (*allocf)(long);
void (*freef)(void*);
short ssbflags;
enum { dynamic = 1, frozen = 2, unlimited = 4 };
int next_alloc;
char* real_end;
void init(char*, int, char*);
};
inline int strstreambuf::isfrozen() { return (ssbflags&frozen) != 0; }
class strstreambase : public virtual ios {
public:
strstreambuf* rdbuf();
protected:
strstreambase(char*, int, char*);
strstreambase();
~strstreambase();
private:
strstreambuf buf;
};
inline strstreambuf* strstreambase::rdbuf() { return &this->buf; }
class istrstream : public strstreambase, public istream {
public:
istrstream(char*);
istrstream(char*, int);
~istrstream();
};
class ostrstream : public strstreambase, public ostream {
public:
ostrstream(char*, int, int = ios::out);
ostrstream();
~ostrstream();
char* str();
int pcount();
};
inline char* ostrstream::str() { return strstreambase::rdbuf()->str(); }
inline int ostrstream::pcount() {
return strstreambase::rdbuf()->out_waiting();
}
class strstream : public strstreambase, public iostream {
public:
strstream();
strstream(char*, int _sz, int _m);
~strstream();
char* str();
};
inline char* strstream::str() { return strstreambase::rdbuf()->str(); }
#pragma pack()
#endif /* _STRSTREAM_H_ */