OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ReaderWriter.h
Go to the documentation of this file.
1 /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2  *
3  * This library is open source and may be redistributed and/or modified under
4  * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5  * (at your option) any later version. The full license is in LICENSE file
6  * included with this distribution, and on the openscenegraph.org website.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * OpenSceneGraph Public License for more details.
12 */
13 
14 #ifndef OSGDB_READERWRITER
15 #define OSGDB_READERWRITER 1
16 
17 #include <osg/Image>
18 #include <osg/Shape>
19 #include <osg/Node>
20 #include <osg/ScriptEngine>
21 
22 #include <osgDB/AuthenticationMap>
23 
24 #include <deque>
25 #include <list>
26 #include <iosfwd>
27 
28 namespace osgDB {
29 
30 class Archive;
31 
33 typedef std::deque<std::string> FilePathList;
34 
35 // forward declare
36 class Options;
37 
40 {
41  public:
42 
43 
45  osg::Object(true) {}
46 
48  osg::Object(rw,copyop) {}
49 
50  virtual ~ReaderWriter();
51 
53 
54  typedef std::map<std::string, std::string> FormatDescriptionMap;
55  typedef std::list<std::string> FeatureList;
56 
58  virtual const FormatDescriptionMap& supportedProtocols() const { return _supportedProtocols; }
59 
61  virtual const FormatDescriptionMap& supportedExtensions() const { return _supportedExtensions; }
62 
64  virtual const FormatDescriptionMap& supportedOptions() const { return _supportedOptions; }
65 
67  virtual bool acceptsExtension(const std::string& /*extension*/) const;
68 
69  virtual bool acceptsProtocol(const std::string& protocol) const;
70 
72  enum Features
73  {
74  FEATURE_NONE = 0,
75  FEATURE_READ_OBJECT = 1<<0,
76  FEATURE_READ_IMAGE = 1<<1,
77  FEATURE_READ_HEIGHT_FIELD = 1<<2,
78  FEATURE_READ_NODE = 1<<3,
79  FEATURE_READ_SHADER = 1<<4,
80  FEATURE_WRITE_OBJECT = 1<<5,
81  FEATURE_WRITE_IMAGE = 1<<6,
82  FEATURE_WRITE_HEIGHT_FIELD = 1<<7,
83  FEATURE_WRITE_NODE = 1<<8,
84  FEATURE_WRITE_SHADER = 1<<9,
85  FEATURE_READ_SCRIPT = 1<<10,
86  FEATURE_WRITE_SCRIPT = 1<<11,
87  FEATURE_ALL = FEATURE_READ_OBJECT |
88  FEATURE_READ_IMAGE |
89  FEATURE_READ_HEIGHT_FIELD |
90  FEATURE_READ_NODE |
91  FEATURE_READ_SHADER |
92  FEATURE_READ_SCRIPT |
93  FEATURE_WRITE_OBJECT |
94  FEATURE_WRITE_IMAGE |
95  FEATURE_WRITE_HEIGHT_FIELD |
96  FEATURE_WRITE_NODE |
97  FEATURE_WRITE_SHADER |
98  FEATURE_WRITE_SCRIPT
99  };
101  virtual Features supportedFeatures() const;
102 
104  static FeatureList featureAsString(Features feature);
105 
106 
107 
109  {
110  public:
111 
113  {
121  INSUFFICIENT_MEMORY_TO_LOAD
122  };
123 
124  ReadResult(ReadStatus status=FILE_NOT_HANDLED):_status(status) {}
125  ReadResult(const std::string& m):_status(ERROR_IN_READING_FILE),_message(m) {}
126  ReadResult(osg::Object* obj, ReadStatus status=FILE_LOADED):_status(status),_object(obj) {}
127 
128  ReadResult(const ReadResult& rr):_status(rr._status),_message(rr._message),_object(rr._object) {}
129  ReadResult& operator = (const ReadResult& rr) { if (this==&rr) return *this; _status=rr._status; _message=rr._message;_object=rr._object; return *this; }
130 
131  bool operator < (const ReadResult& rhs) const { return _status < rhs._status; }
132 
133  osg::Object* getObject();
134  osg::Image* getImage();
135  osg::HeightField* getHeightField();
136  osg::Node* getNode();
137  osgDB::Archive* getArchive();
138  osg::Shader* getShader();
139  osg::Script* getScript();
140 
141  bool validObject() { return _object.valid(); }
142  bool validImage() { return getImage()!=0; }
143  bool validHeightField() { return getHeightField()!=0; }
144  bool validNode() { return getNode()!=0; }
145  bool validArchive() { return getArchive()!=0; }
146  bool validShader() { return getShader()!=0; }
147  bool validScript() { return getScript()!=0; }
148 
149  osg::Object* takeObject();
150  osg::Image* takeImage();
151  osg::HeightField* takeHeightField();
152  osg::Node* takeNode();
153  osgDB::Archive* takeArchive();
154  osg::Shader* takeShader();
155  osg::Script* takeScript();
156 
157  std::string& message() { return _message; }
158  const std::string& message() const { return _message; }
159 
160  ReadStatus status() const { return _status; }
161  bool success() const { return _status==FILE_LOADED || _status==FILE_LOADED_FROM_CACHE ; }
162  bool loadedFromCache() const { return _status==FILE_LOADED_FROM_CACHE; }
163  bool error() const { return _status==ERROR_IN_READING_FILE; }
164  bool notHandled() const { return _status==FILE_NOT_HANDLED || _status==NOT_IMPLEMENTED; }
165  bool notFound() const { return _status==FILE_NOT_FOUND; }
166  bool notEnoughMemory() const { return _status==INSUFFICIENT_MEMORY_TO_LOAD; }
167 
168  protected:
169 
171  std::string _message;
173 
174  };
175 
177  {
178  public:
179 
181  {
185  FILE_SAVED
186  };
187 
188  WriteResult(WriteStatus status=FILE_NOT_HANDLED):_status(status) {}
189  WriteResult(const std::string& m):_status(ERROR_IN_WRITING_FILE),_message(m) {}
190 
191  WriteResult(const WriteResult& rr):_status(rr._status),_message(rr._message) {}
192  WriteResult& operator = (const WriteResult& rr) { if (this==&rr) return *this; _status=rr._status; _message=rr._message; return *this; }
193 
194  bool operator < (const WriteResult& rhs) const { return _status < rhs._status; }
195 
196  std::string& message() { return _message; }
197  const std::string& message() const { return _message; }
198 
199  WriteStatus status() const { return _status; }
200  bool success() const { return _status==FILE_SAVED; }
201  bool error() const { return _status==ERROR_IN_WRITING_FILE; }
202  bool notHandled() const { return _status==FILE_NOT_HANDLED || _status==NOT_IMPLEMENTED; }
203 
204  protected:
205 
207  std::string _message;
208  };
209 
211  {
214  CREATE
215  };
216 
218 
221  virtual bool fileExists(const std::string& filename, const Options* options) const;
222 
224  virtual ReadResult openArchive(const std::string& /*fileName*/,ArchiveStatus, unsigned int =4096, const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
225 
227  virtual ReadResult openArchive(std::istream& /*fin*/,const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
228 
229  virtual ReadResult readObject(const std::string& /*fileName*/,const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
230  virtual ReadResult readImage(const std::string& /*fileName*/,const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
231  virtual ReadResult readHeightField(const std::string& /*fileName*/,const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
232  virtual ReadResult readNode(const std::string& /*fileName*/,const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
233  virtual ReadResult readShader(const std::string& /*fileName*/,const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
234  virtual ReadResult readScript(const std::string& /*fileName*/,const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
235 
236  virtual WriteResult writeObject(const osg::Object& /*obj*/,const std::string& /*fileName*/,const Options* =NULL) const {return WriteResult(WriteResult::NOT_IMPLEMENTED); }
237  virtual WriteResult writeImage(const osg::Image& /*image*/,const std::string& /*fileName*/,const Options* =NULL) const {return WriteResult(WriteResult::NOT_IMPLEMENTED); }
238  virtual WriteResult writeHeightField(const osg::HeightField& /*heightField*/,const std::string& /*fileName*/,const Options* =NULL) const {return WriteResult(WriteResult::NOT_IMPLEMENTED); }
239  virtual WriteResult writeNode(const osg::Node& /*node*/,const std::string& /*fileName*/,const Options* =NULL) const { return WriteResult(WriteResult::NOT_IMPLEMENTED); }
240  virtual WriteResult writeShader(const osg::Shader& /*shader*/,const std::string& /*fileName*/,const Options* =NULL) const {return WriteResult(WriteResult::NOT_IMPLEMENTED); }
241  virtual WriteResult writeScript(const osg::Script& /*script*/,const std::string& /*fileName*/,const Options* =NULL) const {return WriteResult(WriteResult::NOT_IMPLEMENTED); }
242 
243  virtual ReadResult readObject(std::istream& /*fin*/,const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
244  virtual ReadResult readImage(std::istream& /*fin*/,const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
245  virtual ReadResult readHeightField(std::istream& /*fin*/,const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
246  virtual ReadResult readNode(std::istream& /*fin*/,const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
247  virtual ReadResult readShader(std::istream& /*fin*/,const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
248  virtual ReadResult readScript(std::istream& /*fin*/,const Options* =NULL) const { return ReadResult(ReadResult::NOT_IMPLEMENTED); }
249 
250  virtual WriteResult writeObject(const osg::Object& /*obj*/,std::ostream& /*fout*/,const Options* =NULL) const { return WriteResult(WriteResult::NOT_IMPLEMENTED); }
251  virtual WriteResult writeImage(const osg::Image& /*image*/,std::ostream& /*fout*/,const Options* =NULL) const { return WriteResult(WriteResult::NOT_IMPLEMENTED); }
252  virtual WriteResult writeHeightField(const osg::HeightField& /*heightField*/,std::ostream& /*fout*/,const Options* =NULL) const { return WriteResult(WriteResult::NOT_IMPLEMENTED); }
253  virtual WriteResult writeNode(const osg::Node& /*node*/,std::ostream& /*fout*/,const Options* =NULL) const { return WriteResult(WriteResult::NOT_IMPLEMENTED); }
254  virtual WriteResult writeShader(const osg::Shader& /*shader*/,std::ostream& /*fout*/,const Options* =NULL) const { return WriteResult(WriteResult::NOT_IMPLEMENTED); }
255  virtual WriteResult writeScript(const osg::Script& /*script*/,std::ostream& /*fout*/,const Options* =NULL) const { return WriteResult(WriteResult::NOT_IMPLEMENTED); }
256 
262  void supportsProtocol(const std::string& fmt, const std::string& description);
263 
269  void supportsExtension(const std::string& ext, const std::string& description);
270 
273  void supportsOption(const std::string& opt, const std::string& description);
274 
275  protected:
276 
277  FormatDescriptionMap _supportedProtocols;
278  FormatDescriptionMap _supportedExtensions;
279  FormatDescriptionMap _supportedOptions;
280 };
281 
282 }
283 
284 #endif // OSGDB_READERWRITER
virtual WriteResult writeScript(const osg::Script &, std::ostream &, const Options *=NULL) const
Definition: ReaderWriter.h:255
#define NULL
Definition: Export.h:59
Features
Bit mask for setting up which feature types are available for read and/or write.
Definition: ReaderWriter.h:72
ReaderWriter(const ReaderWriter &rw, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
Definition: ReaderWriter.h:47
virtual const FormatDescriptionMap & supportedExtensions() const
Definition: ReaderWriter.h:61
std::list< std::string > FeatureList
Definition: ReaderWriter.h:55
virtual ReadResult readImage(const std::string &, const Options *=NULL) const
Definition: ReaderWriter.h:230
virtual WriteResult writeImage(const osg::Image &, const std::string &, const Options *=NULL) const
Definition: ReaderWriter.h:237
ReadResult(osg::Object *obj, ReadStatus status=FILE_LOADED)
Definition: ReaderWriter.h:126
virtual ReadResult readObject(std::istream &, const Options *=NULL) const
Definition: ReaderWriter.h:243
write*() method not implemented in concrete ReaderWriter.
Definition: ReaderWriter.h:182
virtual WriteResult writeHeightField(const osg::HeightField &, std::ostream &, const Options *=NULL) const
Definition: ReaderWriter.h:252
virtual WriteResult writeObject(const osg::Object &, std::ostream &, const Options *=NULL) const
Definition: ReaderWriter.h:250
virtual ReadResult readScript(const std::string &, const Options *=NULL) const
Definition: ReaderWriter.h:234
virtual ReadResult readObject(const std::string &, const Options *=NULL) const
Definition: ReaderWriter.h:229
osg::ref_ptr< osg::Object > _object
Definition: ReaderWriter.h:172
WriteResult(WriteStatus status=FILE_NOT_HANDLED)
Definition: ReaderWriter.h:188
virtual ReadResult readHeightField(const std::string &, const Options *=NULL) const
Definition: ReaderWriter.h:231
std::map< std::string, std::string > FormatDescriptionMap
Definition: ReaderWriter.h:54
WriteResult(const std::string &m)
Definition: ReaderWriter.h:189
const std::string & message() const
Definition: ReaderWriter.h:197
virtual const FormatDescriptionMap & supportedProtocols() const
Definition: ReaderWriter.h:58
ReadResult(ReadStatus status=FILE_NOT_HANDLED)
Definition: ReaderWriter.h:124
virtual ReadResult readNode(const std::string &, const Options *=NULL) const
Definition: ReaderWriter.h:232
FormatDescriptionMap _supportedOptions
Definition: ReaderWriter.h:279
virtual ReadResult readNode(std::istream &, const Options *=NULL) const
Definition: ReaderWriter.h:246
File could not be found or could not be read.
Definition: ReaderWriter.h:116
osgDB::Options Options
Definition: ReaderWriter.h:217
WriteResult(const WriteResult &rr)
Definition: ReaderWriter.h:191
#define META_Object(library, name)
Definition: Object.h:42
virtual WriteResult writeImage(const osg::Image &, std::ostream &, const Options *=NULL) const
Definition: ReaderWriter.h:251
Definition: Archive.h:24
virtual ReadResult readScript(std::istream &, const Options *=NULL) const
Definition: ReaderWriter.h:248
virtual ReadResult readShader(std::istream &, const Options *=NULL) const
Definition: ReaderWriter.h:247
OSGDB_EXPORT bool fileExists(const std::string &filename)
Asynchronous file read has been requested, but returning immediately, keep polling plugin until file ...
Definition: ReaderWriter.h:120
virtual ReadResult readShader(const std::string &, const Options *=NULL) const
Definition: ReaderWriter.h:233
File is not appropriate for this file reader, due to some incompatibility, but not a read error...
Definition: ReaderWriter.h:115
std::deque< std::string > FilePathList
Definition: Callbacks.h:28
const std::string & message() const
Definition: ReaderWriter.h:158
virtual WriteResult writeScript(const osg::Script &, const std::string &, const Options *=NULL) const
Definition: ReaderWriter.h:241
#define OSGDB_EXPORT
Definition: Export.h:39
File found, loaded, but an error was encountered during processing.
Definition: ReaderWriter.h:117
Definition: Node.h:71
Definition: AlphaFunc.h:19
virtual WriteResult writeHeightField(const osg::HeightField &, const std::string &, const Options *=NULL) const
Definition: ReaderWriter.h:238
virtual WriteResult writeShader(const osg::Shader &, std::ostream &, const Options *=NULL) const
Definition: ReaderWriter.h:254
read*() method not implemented in concrete ReaderWriter.
Definition: ReaderWriter.h:114
ReadResult(const std::string &m)
Definition: ReaderWriter.h:125
ReadResult(const ReadResult &rr)
Definition: ReaderWriter.h:128
ReadStatus status() const
Definition: ReaderWriter.h:160
File successfully found, loaded, and converted into osg.
Definition: ReaderWriter.h:118
virtual ReadResult openArchive(const std::string &, ArchiveStatus, unsigned int=4096, const Options *=NULL) const
Definition: ReaderWriter.h:224
WriteStatus status() const
Definition: ReaderWriter.h:199
virtual ReadResult readImage(std::istream &, const Options *=NULL) const
Definition: ReaderWriter.h:244
virtual ReadResult readHeightField(std::istream &, const Options *=NULL) const
Definition: ReaderWriter.h:245
virtual WriteResult writeNode(const osg::Node &, const std::string &, const Options *=NULL) const
Definition: ReaderWriter.h:239
FormatDescriptionMap _supportedExtensions
Definition: ReaderWriter.h:278
virtual ReadResult openArchive(std::istream &, const Options *=NULL) const
Definition: ReaderWriter.h:227
FormatDescriptionMap _supportedProtocols
Definition: ReaderWriter.h:277
virtual WriteResult writeShader(const osg::Shader &, const std::string &, const Options *=NULL) const
Definition: ReaderWriter.h:240
virtual const FormatDescriptionMap & supportedOptions() const
Definition: ReaderWriter.h:64
virtual WriteResult writeNode(const osg::Node &, std::ostream &, const Options *=NULL) const
Definition: ReaderWriter.h:253
virtual WriteResult writeObject(const osg::Object &, const std::string &, const Options *=NULL) const
Definition: ReaderWriter.h:236