OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
StreamOperator.h
Go to the documentation of this file.
1 #ifndef OSGDB_STREAMOPERATOR
2 #define OSGDB_STREAMOPERATOR
3 
4 #include <iostream>
5 #include <sstream>
6 #include <osg/Referenced>
7 #include <osgDB/Export>
8 #include <osgDB/DataTypes>
9 
10 namespace osgDB
11 {
12 
13 // forward declare
14 class InputStream;
15 
17 {
18 public:
19  OutputIterator() : _out(0), _supportBinaryBrackets(false) {}
20  virtual ~OutputIterator() {}
21 
22  void setStream( std::ostream* ostream ) { _out = ostream; }
23  std::ostream* getStream() { return _out; }
24  const std::ostream* getStream() const { return _out; }
25 
26  void setSupportBinaryBrackets( bool b ) { _supportBinaryBrackets = b; }
27  bool getSupportBinaryBrackets() const { return _supportBinaryBrackets; }
28 
29  virtual bool isBinary() const = 0;
30 
31  virtual void writeBool( bool b ) = 0;
32  virtual void writeChar( char c ) = 0;
33  virtual void writeUChar( unsigned char c ) = 0;
34  virtual void writeShort( short s ) = 0;
35  virtual void writeUShort( unsigned short s ) = 0;
36  virtual void writeInt( int i ) = 0;
37  virtual void writeUInt( unsigned int i ) = 0;
38  virtual void writeLong( long l ) = 0;
39  virtual void writeULong( unsigned long l ) = 0;
40  virtual void writeFloat( float f ) = 0;
41  virtual void writeDouble( double d ) = 0;
42  virtual void writeString( const std::string& s ) = 0;
43  virtual void writeStream( std::ostream& (*fn)(std::ostream&) ) = 0;
44  virtual void writeBase( std::ios_base& (*fn)(std::ios_base&) ) = 0;
45 
46  virtual void writeGLenum( const ObjectGLenum& value ) = 0;
47  virtual void writeProperty( const ObjectProperty& prop ) = 0;
48  virtual void writeMark( const ObjectMark& mark ) = 0;
49  virtual void writeCharArray( const char* s, unsigned int size ) = 0;
50  virtual void writeWrappedString( const std::string& str ) = 0;
51 
52  virtual void flush() { _out->flush(); }
53 
54 protected:
55  // Return true if the manipulator is std::endl
56  bool isEndl( std::ostream& (*fn)(std::ostream&) )
57  {
58 #ifdef __sun
59  // What a mess, but solaris does not like taking the address below
60  std::stringstream ss;
61  ss << fn;
62  std::string s = ss.str();
63  return !s.empty() && s[0] == '\n';
64 #else
65  return fn==static_cast<std::ostream& (*)(std::ostream&)>(std::endl);
66 #endif
67  }
68 
69  std::ostream* _out;
71 };
72 
74 {
75 public:
76  InputIterator() : _in(0), _inputStream(0), _byteSwap(0), _supportBinaryBrackets(false), _failed(false) {}
77  virtual ~InputIterator() {}
78 
79  void setStream( std::istream* istream ) { _in = istream; }
80  std::istream* getStream() { return _in; }
81  const std::istream* getStream() const { return _in; }
82 
83  void setInputStream( InputStream* inputStream) { _inputStream = inputStream; }
84  InputStream* getInputStream() { return _inputStream; }
85  const InputStream* getInputStream() const { return _inputStream; }
86 
87  void setByteSwap(int byteSwap) { _byteSwap = byteSwap; }
88  int getByteSwap() const { return _byteSwap; }
89 
90  void setSupportBinaryBrackets( bool b ) { _supportBinaryBrackets = b; }
91  bool getSupportBinaryBrackets() const { return _supportBinaryBrackets; }
92 
93  void checkStream() const { if (_in->rdstate()&_in->failbit) _failed = true; }
94  bool isFailed() const { return _failed; }
95 
96  virtual bool isBinary() const = 0;
97 
98  virtual void readBool( bool& b ) = 0;
99  virtual void readChar( char& c ) = 0;
100  virtual void readSChar( signed char& c ) = 0;
101  virtual void readUChar( unsigned char& c ) = 0;
102  virtual void readShort( short& s ) = 0;
103  virtual void readUShort( unsigned short& s ) = 0;
104  virtual void readInt( int& i ) = 0;
105  virtual void readUInt( unsigned int& i ) = 0;
106  virtual void readLong( long& l ) = 0;
107  virtual void readULong( unsigned long& l ) = 0;
108  virtual void readFloat( float& f ) = 0;
109  virtual void readDouble( double& d ) = 0;
110  virtual void readString( std::string& s ) = 0;
111  virtual void readStream( std::istream& (*fn)(std::istream&) ) = 0;
112  virtual void readBase( std::ios_base& (*fn)(std::ios_base&) ) = 0;
113 
114  virtual void readGLenum( ObjectGLenum& value ) = 0;
115  virtual void readProperty( ObjectProperty& prop ) = 0;
116  virtual void readMark( ObjectMark& mark ) = 0;
117  virtual void readCharArray( char* s, unsigned int size ) = 0;
118  virtual void readWrappedString( std::string& str ) = 0;
119 
120  virtual bool matchString( const std::string& /*str*/ ) { return false; }
121  virtual void advanceToCurrentEndBracket() {}
122 
123  void throwException( const std::string& msg );
124 
125  void readComponentArray( char* s, unsigned int numElements, unsigned int numComponentsPerElements, unsigned int componentSizeInBytes);
126 
127 protected:
128  std::istream* _in;
132  mutable bool _failed;
133 };
134 
135 }
136 
137 #endif
bool isEndl(std::ostream &(*fn)(std::ostream &))
const std::ostream * getStream() const
virtual void flush()
void setStream(std::istream *istream)
int getByteSwap() const
bool isFailed() const
void setSupportBinaryBrackets(bool b)
std::ostream * _out
void checkStream() const
const std::istream * getStream() const
void setSupportBinaryBrackets(bool b)
void setInputStream(InputStream *inputStream)
std::istream * getStream()
InputStream * getInputStream()
virtual bool matchString(const std::string &)
std::istream * _in
Definition: Archive.h:24
#define OSGDB_EXPORT
Definition: Export.h:39
std::ostream * getStream()
void setStream(std::ostream *ostream)
void setByteSwap(int byteSwap)
const InputStream * getInputStream() const
virtual void advanceToCurrentEndBracket()
bool getSupportBinaryBrackets() const
osgDB::InputStream * _inputStream
bool getSupportBinaryBrackets() const