//C++ header - Open Scene Graph - Copyright (C) 1998-2002 Robert Osfield //Distributed under the terms of the GNU Library General Public License (LGPL) //as published by the Free Software Foundation. #ifndef OSGDB_FIELDREADERITERATOR #define OSGDB_FIELDREADERITERATOR 1 #include #include #include #include #include namespace osgDB { class OSGDB_EXPORT FieldReaderIterator { public: enum { MINIMUM_FIELD_READER_QUEUE_SIZE = 10 }; FieldReaderIterator(); FieldReaderIterator(const FieldReaderIterator& ic); virtual ~FieldReaderIterator(); FieldReaderIterator& operator = (const FieldReaderIterator& ic); void attach(std::istream* input); void detach(); virtual bool eof() const; FieldReader& getFieldReader() { return _reader; } void insert(int pos,Field* field); void insert(int pos,const char* str); Field& operator [] (int pos); Field& field (int pos); FieldReaderIterator& operator ++ (); FieldReaderIterator& operator += (int no); /** increments the iterator of the next simple field or * whole block if the current field[0] is an open bracket */ void advanceOverCurrentFieldOrBlock(); void advanceToEndOfCurrentBlock(); void advanceToEndOfBlock(int noNestBrackets); bool matchSequence(const char* str); bool readSequence(const char* keyword,std::string& value); bool readSequence(const char* keyword,unsigned int& value); bool readSequence(const char* keyword,int& value); bool readSequence(const char* keyword,float& value); bool readSequence(const char* keyword,osg::Vec2& value); bool readSequence(const char* keyword,osg::Vec3& value); bool readSequence(const char* keyword,osg::Vec4& value); bool readSequence(std::string& value); bool readSequence(unsigned int& value); bool readSequence(int& value); bool readSequence(float& value); bool readSequence(osg::Vec2& value); bool readSequence(osg::Vec3& value); bool readSequence(osg::Vec4& value); private: void _init(); void _free(); void _copy(const FieldReaderIterator& ic); FieldReader _reader; Field _blank; Field* _previousField; Field** _fieldQueue; int _fieldQueueSize; int _fieldQueueCapacity; }; } #endif // __OSGDB_FIELD_READER_QUEUE_H