Files
pvData/pvDataApp/pv/pvData.h
2010-08-10 12:43:47 -04:00

98 lines
2.6 KiB
C++

/* pvData.h */
#include <string>
#include <stdexcept>
#ifndef TYPE_H
#define TYPE_H
namespace epics { namespace pvData {
enum Type {
scalar,
scalarArray,
structure,
structureArray
};
class TypeFunc {
public:
static void toString(std::string &buf,const Type type);
};
enum ScalarType {
pvBoolean,
pvByte,
pvShort,
pvInt,
pvLong,
pvFloat,
pvDouble,
pvString
};
class ScalarTypeFunc {
public:
static bool isInteger(ScalarType type);
static bool isNumeric(ScalarType type);
static bool isPrimitive(ScalarType type);
static ScalarType getScalarType(std::string const& value);
static void toString(std::string &buf,const ScalarType scalarType);
};
class Field {
public:
virtual ~Field();
virtual std::string const& getFieldName() const = 0;
virtual Type getType() const = 0;
virtual void toString(std::string &buf) const = 0;
virtual void toString(std::string &buf,int indentLevel) const = 0;
};
class Field;
class Scalar;
class ScalarArray;
class Structure;
class StructureArray;
class Scalar : public Field{
public:
virtual ~Scalar();
virtual ScalarType getScalarType() const = 0;
};
class ScalarArray : public Field{
public:
virtual ~ScalarArray();
virtual ScalarType getScalerType() const = 0;
};
class Structure : public Field {
public:
virtual ~Structure();
virtual std::string const * const getFieldNames() const = 0;
virtual Field const & getField(std::string const& fieldName) const = 0;
virtual int getFieldIndex(std::string const& fieldName) const = 0;
virtual Field const * const getFields() const = 0;
};
class StructureArray : public Field{
public:
virtual ~StructureArray();
virtual Structure const & getStructure() const = 0;
};
class FieldCreate {
public:
Field const & create(std::string const& fieldName,Field const & field) const;
Scalar const & createScalar(std::string const& fieldName,ScalarType scalarType) const;
ScalarArray const & createScalarArray(std::string const& fieldName,ScalarType elementType) const;
Structure const & createStructure (std::string const& fieldName,Field const * const fields) const;
StructureArray const & createStructureArray(std::string const& fieldName,Structure const & structure) const;
protected:
FieldCreate();
};
extern FieldCreate & getFieldCreate();
}}
#endif /* TYPE_H */