#ifndef OSGINTROSPECTION_PARAMETERINFO_ #define OSGINTROSPECTION_PARAMETERINFO_ #include #include #include #include namespace osgIntrospection { /// This class stores information about a function parameter. A parameter /// is defined by its name, its type, its position within the parameter /// list, and zero or more attributes. Attributes describe how the /// parameter behave, for example whether it is an input or an output /// parameter. class ParameterInfo { public: enum ParameterAttributes { NONE = 0, IN = 1, // parameter is used to pass data to the function OUT = 2, // parameter is used to return data from the function INOUT = IN | OUT }; /// Direct initialization constructor. inline ParameterInfo(const std::string &name, const Type &type, int attribs, const Value &defval = Value()); /// Returns the parameter's name. inline const std::string &getName() const; /// Returns the parameter's type. inline const Type &getParameterType() const; /// Returns the parameter's attributes. inline int getAttributes() const; /// Returns the default value. inline const Value &getDefaultValue() const; /// Returns whether the parameter has the IN attribute. inline bool isIn() const { return (attribs_ & IN) != 0; } /// Returns whether the parameter has the OUT attribute. inline bool isOut() const { return (attribs_ & OUT) != 0; } /// Returns whether the parameter has both the IN and the /// OUT attribute. inline bool isInOut() const { return isIn() && isOut(); } private: std::string name_; const Type &type_; int attribs_; Value default_; }; // INLINE METHODS inline ParameterInfo::ParameterInfo(const std::string &name, const Type &type, int attribs, const Value &defval) : name_(name), type_(type), attribs_(attribs), default_(defval) { } inline const std::string &ParameterInfo::getName() const { return name_; } inline const Type &ParameterInfo::getParameterType() const { return type_; } inline int ParameterInfo::getAttributes() const { return attribs_; } inline const Value &ParameterInfo::getDefaultValue() const { return default_; } } #endif