Gyoto
|
Property that can be set and got using standard methods. More...
#include <GyotoProperty.h>
Classes | |
union | getter_t |
Union holding an accessor to get any type. More... | |
union | getter_unit_t |
Union holding an accessor to get double or vector<double> with unit. More... | |
union | setter_t |
Union holding an accessor to set any type. More... | |
union | setter_unit_t |
Union holding an accessor to set double or vector<double> with unit. More... | |
Public Types | |
enum | type_e { double_t , long_t , unsigned_long_t , size_t_t , bool_t , string_t , filename_t , vector_double_t , vector_unsigned_long_t , metric_t , screen_t , astrobj_t , spectrum_t , spectrometer_t , empty_t } |
Possible type of a Property instance. More... | |
typedef void(Object::* | set_double_t) (double val) |
Prototype for an accessor to set a double. | |
typedef double(Object::* | get_double_t) () const |
Prototype for an accessor to get a double. | |
typedef void(Object::* | set_double_unit_t) (double val, std::string const &unit) |
Prototype for an accessor to set a double, with unit. | |
typedef double(Object::* | get_double_unit_t) (std::string const &unit) const |
Prototype for an accessor to get a double, with unit. | |
typedef void(Object::* | set_long_t) (long val) |
Prototype for an accessor to set a long. | |
typedef long(Object::* | get_long_t) () const |
Prototype for an accessor to get a long. | |
typedef void(Object::* | set_unsigned_long_t) (unsigned long val) |
Prototype for an accessor to set an unsigned long. | |
typedef unsigned long(Object::* | get_unsigned_long_t) () const |
Prototype for an accessor to get an unsigned long. | |
typedef void(Object::* | set_size_t_t) (size_t val) |
Prototype for an accessor to set a size_t. | |
typedef size_t(Object::* | get_size_t_t) () const |
Prototype for an accessor to get a size_t. | |
typedef void(Object::* | set_bool_t) (bool val) |
Prototype for an accessor to set a bool. | |
typedef bool(Object::* | get_bool_t) () const |
Prototype for an accessor to get a bool. | |
typedef void(Object::* | set_string_t) (std::string const &) |
Prototype for an accessor to set a string. | |
typedef std::string(Object::* | get_string_t) () const |
Prototype for an accessor to get a string. | |
typedef void(Object::* | set_fname_t) (std::string const &) |
Prototype for an accessor to set a filename. | |
typedef std::string(Object::* | get_fname_t) () const |
Prototype for an accessor to get a filename. | |
typedef void(Object::* | set_vector_double_t) (std::vector< double > const &) |
Prototype for an accessor to set a std::vector<double> | |
typedef std::vector< double >(Object::* | get_vector_double_t) () const |
Prototype for an accessor to get a std::vector<double> | |
typedef void(Object::* | set_vector_double_unit_t) (std::vector< double > const &, std::string const &) |
Prototype for an accessor to set a std::vector<double>, with unit. | |
typedef std::vector< double >(Object::* | get_vector_double_unit_t) (std::string const &) const |
Prototype for an accessor to get a std::vector<double>, with unit. | |
typedef void(Object::* | set_vector_unsigned_long_t) (std::vector< unsigned long > const &) |
Prototype for an accessor to set a std::vector<unsigned long> | |
typedef std::vector< unsigned long >(Object::* | get_vector_unsigned_long_t) () const |
Prototype for an accessor to get a std::vector<unsigned long> | |
typedef void(Object::* | set_metric_t) (Gyoto::SmartPointer< Gyoto::Metric::Generic >) |
Prototype for an accessor to set a Gyoto::SmartPointer<Gyoto::Metric::Generic> | |
typedef Gyoto::SmartPointer< Gyoto::Metric::Generic >(Object::* | get_metric_t) () const |
Prototype for an accessor to get a Gyoto::SmartPointer<Gyoto::Metric::Generic> | |
typedef void(Object::* | set_screen_t) (Gyoto::SmartPointer< Gyoto::Screen >) |
Prototype for an accessor to set a Gyoto::SmartPointer<Gyoto::Screen> | |
typedef Gyoto::SmartPointer< Gyoto::Screen >(Object::* | get_screen_t) () const |
Prototype for an accessor to get a Gyoto::SmartPointer<Gyoto::Screen> | |
typedef void(Object::* | set_astrobj_t) (Gyoto::SmartPointer< Gyoto::Astrobj::Generic >) |
Prototype for an accessor to set a Gyoto::SmartPointer<Gyoto::Astrobj::Generic> | |
typedef Gyoto::SmartPointer< Gyoto::Astrobj::Generic >(Object::* | get_astrobj_t) () const |
Prototype for an accessor to get a Gyoto::SmartPointer<Gyoto::Astrobj::Generic> | |
typedef void(Object::* | set_spectrum_t) (Gyoto::SmartPointer< Gyoto::Spectrum::Generic >) |
Prototype for an accessor to set a Gyoto::SmartPointer<Gyoto::Spectrum::Generic> | |
typedef Gyoto::SmartPointer< Gyoto::Spectrum::Generic >(Object::* | get_spectrum_t) () const |
Prototype for an accessor to get a Gyoto::SmartPointer<Gyoto::Spectrum::Generic> | |
typedef void(Object::* | set_spectrometer_t) (Gyoto::SmartPointer< Gyoto::Spectrometer::Generic >) |
Prototype for an accessor to set a Gyoto::SmartPointer<Gyoto::Spectrometer::Generic> | |
typedef Gyoto::SmartPointer< Gyoto::Spectrometer::Generic >(Object::* | get_spectrometer_t) () const |
Prototype for an accessor to get a Gyoto::SmartPointer<Gyoto::Spectrometer::Generic> | |
Public Member Functions | |
operator bool () const | |
True if Gyoto::Property::type is not Gyoto::Property::empty_t. | |
Property (Property const *const ancestor) | |
Constructor for type==empty_t. | |
Property (std::string classname, std::string doc="") | |
Constructor for class name pseudo-property. | |
Property (std::string name, set_long_t set_long, get_long_t get_long, std::string doc) | |
Constructor for type==long_t. | |
Property (std::string name, set_unsigned_long_t set_unsigned_long, get_unsigned_long_t get_unsigned_long, std::string doc) | |
Constructor for type==unsigned_long_t. | |
Property (std::string name, set_size_t_t set_size_t, get_size_t_t get_size_t, int dummy, std::string doc) | |
Constructor for type==size_t_t. More... | |
Property (std::string name, set_double_t set_double, get_double_t get_double, std::string doc) | |
Constructor for type==double_t, without unit support. | |
Property (std::string name, set_double_t set_double, get_double_t get_double, set_double_unit_t set_double_unit, get_double_unit_t get_double_unit, std::string doc) | |
Constructor for type==double_t, with unit support. | |
Property (std::string name, std::string name_false, set_bool_t set_bool, get_bool_t get_bool, std::string doc) | |
Constructor for type==bool_t. | |
Property (std::string name, set_string_t set_string, get_string_t get_string, bool is_filename, std::string doc) | |
Constructor for type==string_t or filename_t. More... | |
Property (std::string name, set_vector_double_t set_vdouble, get_vector_double_t get_vdouble, std::string doc) | |
Constructor for type==vector_double_t, without unit support. | |
Property (std::string name, set_vector_double_t set_vdouble, get_vector_double_t get_vdouble, set_vector_double_unit_t set_vdouble_unit, get_vector_double_unit_t get_vdouble_unit, std::string doc) | |
Constructor for type==vector_double_t, with unit support. | |
Property (std::string name, set_vector_unsigned_long_t set_vulong, get_vector_unsigned_long_t get_vulong, std::string doc) | |
Constructor for type==vector_unsigned_long_t. | |
Property (std::string name, set_metric_t set_metric, get_metric_t get_metric, std::string doc) | |
Constructor for type==metric_t. | |
Property (std::string name, set_screen_t set_screen, get_screen_t get_screen, std::string doc) | |
Constructor for type==screen_t. | |
Property (std::string name, set_astrobj_t set_astrobj, get_astrobj_t get_astrobj, std::string doc) | |
Constructor for type==astrobj_t. | |
Property (std::string name, set_spectrum_t set_spectrum, get_spectrum_t get_spectrum, std::string doc) | |
Constructor for type==spectrum_t. | |
Property (std::string name, set_spectrometer_t set_spectrometer, get_spectrometer_t get_spectrometer, std::string doc) | |
Constructor for type==spectrometer_t. | |
Public Attributes | |
std::string | name |
Name of this instance. | |
std::string | name_false |
Name if false. More... | |
int | type |
Type of this instance. | |
setter_t | setter |
Pointer to the setter method. More... | |
getter_t | getter |
Pointer to the getter method. More... | |
setter_unit_t | setter_unit |
Pointer to the setter (with unit) method. More... | |
getter_unit_t | getter_unit |
Pointer to the getter (with unit) method. More... | |
std::string | doc |
Property const *const | parent |
If type is empty_t, link to another Property list. | |
Property that can be set and got using standard methods.
The Property API makes it easy to declare the parameters that can be set in a class.
Developpers who simply write classes (deriving from Astrobj::Generic, , Metric::Generic, Spectrum::Generic) need not know the inners of the Property class and interact with it only using macros to declare the parameters they need to read from XML.
To make use of the Property framework, a class must derive from Gyoto::Object and use the GYOTO_OBJECT in a public section of the class declaration (i.e. in the .h file). Then, in the corresponding .C file, the GYOTO_PROPERTY_* macros are used as follows (note the absence of punctuation after the macros):
In the above, GYOTO_PROPERTY_START starts the definition of the static member MyClass::properties. Each GYOTO_PROPERTY_<type> macro declares a new property. GYOTO_PROPERTY_END ends the definition of the property list, with an optional pointer to the parent's class Property list, and defines the MyClass::getProperties() method.
The underlying accessors must always be defined, both to set and to get the property. For the sake of simplicity, only a limited number of data types are allowed:
For the floating point data-types (double and vector<double>), two additional accessors supporting units can be provided. The accessors must have the same name and have specific prototypes, see the various function pointer typedefs, e.g. set_double_t and get_double_t.
The type used in these accessors may not be the same as the type of the underlying class member. For instance, to read an array, it was chosen to use the std::vector<type> type because it is easy to read such a vector from XML and to thus determine dynamically the number of elements provided. But this type is slow, so it is expected that the class member will rather be a C-style array (double arr[]) or something else entirely. It is not forbidden to have a set of high-level accessors for the Property interface on top of lower-level, more efficient accessors to be used in compiled, static code:
In this example, assuming MyClass is based directly on Object and member_ is the only parameter to read from XML, the Property list may be defined as:
Again, nothing more is required to read and write ArrayMember from XML and from Yorick.
Possible type of a Property instance.
These are all the values that Property::type may take.
Enumerator | |
---|---|
double_t | Type is double. |
long_t | Type is long. |
unsigned_long_t | Type is unsigned long (a.k.a. size_t) |
size_t_t | Type is size_t (only if distinct from unsigned long) |
bool_t | Type is bool. |
string_t | Type is std::string. |
filename_t | Type is std::string and holds a file name. In this case, the value may be changed to include relative or absolute path. The prefix "`pwd`/" forces path to be interpreted relative to the current working directory. If the value starts with "/", it is interpreted as an absolute path. Otherwise, when reading from XML, the path is interpreted relative to the XML file. |
vector_double_t | Type is std::vector<double> |
vector_unsigned_long_t | Type is std::vector<unsigned long> |
metric_t | Type is Gyoto::SmartPointer<Gyoto::Metric::Generic> |
screen_t | Type is Gyoto::SmartPointer<Gyoto::Screen::Generic> |
astrobj_t | Type is Gyoto::SmartPointer<Gyoto::Astrobj::Generic> |
spectrum_t | Type is Gyoto::SmartPointer<Gyoto::Spectrum::Generic> |
spectrometer_t | Type is Gyoto::SmartPointer<Gyoto::Spectrometer::Generic> |
empty_t | Property is empty. In this case (and only in this case):
|
Gyoto::Property::Property | ( | std::string | name, |
set_size_t_t | set_size_t, | ||
get_size_t_t | get_size_t, | ||
int | dummy, | ||
std::string | doc | ||
) |
Gyoto::Property::Property | ( | std::string | name, |
set_string_t | set_string, | ||
get_string_t | get_string, | ||
bool | is_filename, | ||
std::string | doc | ||
) |
Constructor for type==string_t or filename_t.
name | name of the Property |
set_string | pointer to the setter accessor |
get_string | pointer to the getter accessor |
is_filename | true means type=filename_t |
getter_unit_t Gyoto::Property::getter_unit |
Pointer to the getter (with unit) method.
Right type is stored in type
setter_unit_t Gyoto::Property::setter_unit |
Pointer to the setter (with unit) method.
Right type is stored in type