/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield * * This library is open source and may be redistributed and/or modified under * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or * (at your option) any later version. The full license is in LICENSE file * included with this distribution, and on the openscenegraph.org website. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * OpenSceneGraph Public License for more details. */ #ifndef OSGDB_FIELDREADERITERATOR #define OSGDB_FIELDREADERITERATOR 1 #include #include #include #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::Vec2f& value); bool readSequence(const char* keyword,osg::Vec3f& value); bool readSequence(const char* keyword,osg::Vec4f& value); bool readSequence(const char* keyword,osg::Vec2d& value); bool readSequence(const char* keyword,osg::Vec3d& value); bool readSequence(const char* keyword,osg::Vec4d& value); bool readSequence(std::string& value); bool readSequence(unsigned int& value); bool readSequence(int& value); bool readSequence(float& value); bool readSequence(osg::Vec2f& value); bool readSequence(osg::Vec3f& value); bool readSequence(osg::Vec4f& value); bool readSequence(osg::Vec2d& value); bool readSequence(osg::Vec3d& value); bool readSequence(osg::Vec4d& 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