2001-10-04 23:12:57 +08:00
|
|
|
//C++ header - Open Scene Graph - Copyright (C) 1998-2001 Robert Osfield
|
|
|
|
//Distributed under the terms of the GNU Library General Public License (LGPL)
|
|
|
|
//as published by the Free Software Foundation.
|
|
|
|
|
2001-09-20 05:08:56 +08:00
|
|
|
#ifndef OSGDB_FIELD
|
|
|
|
#define OSGDB_FIELD 1
|
|
|
|
|
|
|
|
#include <osg/Types>
|
|
|
|
#include <osgDB/Export>
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
namespace osgDB {
|
|
|
|
|
|
|
|
|
|
|
|
class OSGDB_EXPORT Field
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
enum {
|
|
|
|
MIN_CACHE_SIZE = 256
|
|
|
|
};
|
|
|
|
|
|
|
|
Field();
|
|
|
|
Field(const Field& field);
|
|
|
|
virtual ~Field();
|
|
|
|
|
|
|
|
virtual Field& operator = (const Field& ic);
|
|
|
|
|
|
|
|
void reset();
|
|
|
|
void addChar(char c);
|
|
|
|
int getNoCharacters() const { return _fieldCacheSize; }
|
|
|
|
|
|
|
|
void setWithinQuotes(bool withinQuotes=true);
|
|
|
|
bool getWithinQuotes();
|
|
|
|
|
|
|
|
void setNoNestedBrackets(int no);
|
|
|
|
int getNoNestedBrackets();
|
|
|
|
|
|
|
|
enum FieldType
|
|
|
|
{
|
|
|
|
OPEN_BRACKET,
|
|
|
|
CLOSE_BRACKET,
|
|
|
|
STRING,
|
|
|
|
WORD,
|
|
|
|
REAL,
|
|
|
|
INTEGER,
|
|
|
|
BLANK,
|
|
|
|
UNINTIALISED
|
|
|
|
};
|
|
|
|
|
|
|
|
FieldType getFieldType() const;
|
|
|
|
|
|
|
|
bool isValid() const;
|
|
|
|
|
|
|
|
bool isOpenBracket() const;
|
|
|
|
bool isCloseBracket() const;
|
|
|
|
|
|
|
|
bool isWord() const;
|
|
|
|
bool matchWord(const char* str) const;
|
|
|
|
bool matchWord(const char* str,int noCharacters) const;
|
|
|
|
|
|
|
|
bool isString() const;
|
|
|
|
bool matchString(const char* str) const;
|
|
|
|
bool matchString(const char* str,int noCharacters) const;
|
|
|
|
bool isQuotedString() const;
|
|
|
|
|
|
|
|
const char* getStr() const;
|
|
|
|
char* takeStr();
|
|
|
|
|
|
|
|
bool isInt() const;
|
|
|
|
bool matchInt(int i) const;
|
|
|
|
bool getInt(int& i) const;
|
|
|
|
|
|
|
|
bool isUInt() const;
|
|
|
|
bool matchUInt(osg::uint i) const;
|
|
|
|
bool getUInt(osg::uint& i) const;
|
|
|
|
|
|
|
|
bool isFloat() const;
|
|
|
|
bool matchFloat(float f) const;
|
|
|
|
bool getFloat(float& f) const;
|
|
|
|
|
|
|
|
bool isDouble() const;
|
|
|
|
bool matchDouble(double f) const;
|
|
|
|
bool getDouble(double& d) const;
|
|
|
|
|
|
|
|
static FieldType calculateFieldType(const char* str,bool withinQuotes=false);
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
void _init();
|
|
|
|
void _free();
|
|
|
|
void _copy(const Field& ic);
|
|
|
|
|
|
|
|
int _fieldCacheCapacity;
|
|
|
|
int _fieldCacheSize;
|
|
|
|
char* _fieldCache;
|
|
|
|
|
|
|
|
mutable FieldType _fieldType;
|
|
|
|
|
|
|
|
bool _withinQuotes;
|
|
|
|
|
|
|
|
int _noNestedBrackets;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // __SG_FIELD_H
|