111 lines
3.4 KiB
C++
111 lines
3.4 KiB
C++
/* -*-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 <osg/Vec2f>
|
|
#include <osg/Vec2f>
|
|
#include <osg/Vec4f>
|
|
#include <osg/Vec2d>
|
|
#include <osg/Vec2d>
|
|
#include <osg/Vec4d>
|
|
|
|
#include <osgDB/Field>
|
|
#include <osgDB/FieldReader>
|
|
|
|
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
|