26 #ifndef __GyotoProperty_H_ 27 #define __GyotoProperty_H_ 40 namespace Metric {
class Generic; }
41 namespace Astrobj {
class Generic; }
42 namespace Spectrum {
class Generic; }
43 namespace Spectrometer {
class Generic; }
52 #define GYOTO_PROPERTY_THREAD_UNSAFE(class) \ 53 bool class::isThreadSafe() const {return false;} 60 #define GYOTO_PROPERTY_ACCESSORS(class, type, member, method) \ 61 void class::method(type v) {member=v;} \ 62 type class::method() const {return member;} 73 #define GYOTO_PROPERTY_ACCESSORS_SPECIAL(class, type, member, method, set, get) \ 74 void class::method(type v) {member=v; set } \ 75 type class::method() const {get ; return member;} 88 #define GYOTO_PROPERTY_ACCESSORS_GEOMETRICAL(class, member, method, metric) \ 89 GYOTO_PROPERTY_ACCESSORS(class, double, member, method) \ 90 void class::method(double v, std::string const &u) { \ 91 member=Units::ToGeometrical(v, u, metric); \ 93 double class::method(std::string const &u) const { \ 94 return Units::FromGeometrical(member, u, metric); \ 108 #define GYOTO_PROPERTY_ACCESSORS_GEOMETRICAL_SPECIAL(class, member, method, metric, set, get) \ 109 GYOTO_PROPERTY_ACCESSORS_SPECIAL(class, double, member, method, set, get) \ 110 void class::method(double v, std::string const &u) { \ 111 member=Units::ToGeometrical(v, u, metric); \ 113 double class::method(std::string const &u) const { \ 114 return Units::FromGeometrical(member, u, metric); \ 127 #define GYOTO_PROPERTY_ACCESSORS_UNIT(class, member, method, unit) \ 128 GYOTO_PROPERTY_ACCESSORS(class, double, member, method) \ 129 void class::method(double v, std::string const &u) { \ 130 method(Units::Converter(u, unit)(v)); \ 132 double class::method(std::string const &u) const { \ 133 return Units::Converter(unit, u)(method()); \ 141 #define GYOTO_PROPERTY_START(...) \ 142 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 143 "wrong number of arguments", \ 144 "wrong number of arguments", \ 145 "wrong number of arguments", \ 146 "wrong number of arguments", \ 147 GYOTO_PROPERTY_START_DOC(__VA_ARGS__), \ 148 GYOTO_PROPERTY_START_NODOC(__VA_ARGS__), \ 149 "wrong number of arguments" \ 164 #define GYOTO_PROPERTY_BOOL(...) \ 165 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 166 "wrong number of arguments", \ 167 GYOTO_PROPERTY_BOOL_DOC(__VA_ARGS__), \ 168 GYOTO_PROPERTY_BOOL_NODOC(__VA_ARGS__), \ 169 "wrong number of arguments", \ 170 "wrong number of arguments", \ 171 "wrong number of arguments", \ 172 "wrong number of arguments" \ 185 #define GYOTO_PROPERTY_DOUBLE(...) \ 186 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 189 GYOTO_PROPERTY_DOUBLE_DOC(__VA_ARGS__), \ 190 GYOTO_PROPERTY_DOUBLE_NODOC(__VA_ARGS__), \ 207 #define GYOTO_PROPERTY_DOUBLE_UNIT(...) \ 208 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 211 GYOTO_PROPERTY_DOUBLE_UNIT_DOC(__VA_ARGS__), \ 212 GYOTO_PROPERTY_DOUBLE_UNIT_NODOC(__VA_ARGS__), \ 228 #define GYOTO_PROPERTY_VECTOR_DOUBLE(...) \ 229 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 232 GYOTO_PROPERTY_VECTOR_DOUBLE_DOC(__VA_ARGS__), \ 233 GYOTO_PROPERTY_VECTOR_DOUBLE_NODOC(__VA_ARGS__), \ 249 #define GYOTO_PROPERTY_VECTOR_DOUBLE_UNIT(...) \ 250 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 253 GYOTO_PROPERTY_VECTOR_DOUBLE_UNIT_DOC(__VA_ARGS__), \ 254 GYOTO_PROPERTY_VECTOR_DOUBLE_UNIT_NODOC(__VA_ARGS__), \ 270 #define GYOTO_PROPERTY_STRING(...) \ 271 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 274 GYOTO_PROPERTY_STRING_DOC(__VA_ARGS__), \ 275 GYOTO_PROPERTY_STRING_NODOC(__VA_ARGS__), \ 291 #define GYOTO_PROPERTY_FILENAME(...) \ 292 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 295 GYOTO_PROPERTY_FILENAME_DOC(__VA_ARGS__), \ 296 GYOTO_PROPERTY_FILENAME_NODOC(__VA_ARGS__), \ 312 #define GYOTO_PROPERTY_LONG(...) \ 313 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 316 GYOTO_PROPERTY_LONG_DOC(__VA_ARGS__), \ 317 GYOTO_PROPERTY_LONG_NODOC(__VA_ARGS__), \ 333 #define GYOTO_PROPERTY_UNSIGNED_LONG(...) \ 334 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 337 GYOTO_PROPERTY_UNSIGNED_LONG_DOC(__VA_ARGS__), \ 338 GYOTO_PROPERTY_UNSIGNED_LONG_NODOC(__VA_ARGS__), \ 354 #define GYOTO_PROPERTY_VECTOR_UNSIGNED_LONG(...) \ 355 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 358 GYOTO_PROPERTY_VECTOR_UNSIGNED_LONG_DOC(__VA_ARGS__), \ 359 GYOTO_PROPERTY_VECTOR_UNSIGNED_LONG_NODOC(__VA_ARGS__), \ 375 #define GYOTO_PROPERTY_SIZE_T(...) \ 376 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 379 GYOTO_PROPERTY_SIZE_T_DOC(__VA_ARGS__), \ 380 GYOTO_PROPERTY_SIZE_T_NODOC(__VA_ARGS__), \ 396 #define GYOTO_PROPERTY_METRIC(...) \ 397 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 400 GYOTO_PROPERTY_METRIC_DOC(__VA_ARGS__), \ 401 GYOTO_PROPERTY_METRIC_NODOC(__VA_ARGS__), \ 418 #define GYOTO_PROPERTY_SPECTRUM(...) \ 419 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 422 GYOTO_PROPERTY_SPECTRUM_DOC(__VA_ARGS__), \ 423 GYOTO_PROPERTY_SPECTRUM_NODOC(__VA_ARGS__), \ 440 #define GYOTO_PROPERTY_ASTROBJ(...) \ 441 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 444 GYOTO_PROPERTY_ASTROBJ_DOC(__VA_ARGS__), \ 445 GYOTO_PROPERTY_ASTROBJ_NODOC(__VA_ARGS__), \ 462 #define GYOTO_PROPERTY_SCREEN(...) \ 463 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 466 GYOTO_PROPERTY_SCREEN_DOC(__VA_ARGS__), \ 467 GYOTO_PROPERTY_SCREEN_NODOC(__VA_ARGS__), \ 484 #define GYOTO_PROPERTY_SPECTROMETER(...) \ 485 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 488 GYOTO_PROPERTY_SPECTROMETER_DOC(__VA_ARGS__), \ 489 GYOTO_PROPERTY_SPECTROMETER_NODOC(__VA_ARGS__), \ 496 #define GYOTO_PROPERTY_END(class, next) \ 498 Gyoto::Property const * class::getProperties() const { \ 499 return class::properties; \ 501 const std::string class::builtinPluginValue ( GYOTO_STRINGIFY(GYOTO_PLUGIN) ); \ 502 std::vector<std::string> class::plugins() const { \ 503 if (plugins_.size() == 0) { \ 504 std::vector<std::string> p; \ 505 p.push_back(class::builtinPluginValue); \ 510 void class::plugins(std::vector<std::string> const & plugname) { \ 672 typedef void (
Object::* set_double_t)(
double val);
674 typedef double (
Object::* get_double_t)()
const;
676 typedef void (
Object::* set_double_unit_t)(
double val,
677 std::string
const &unit);
679 typedef double (
Object::* get_double_unit_t)(std::string
const &unit)
const;
681 typedef void (
Object::* set_long_t)(
long val);
683 typedef long (
Object::* get_long_t)()
const;
685 typedef void (
Object::* set_unsigned_long_t)(
unsigned long val);
687 typedef unsigned long (
Object::* get_unsigned_long_t)()
const;
689 typedef void (
Object::* set_size_t_t)(
size_t val);
693 typedef void (
Object::* set_bool_t)(
bool val);
695 typedef bool (
Object::* get_bool_t)()
const;
697 typedef void (
Object::* set_string_t)(std::string
const&);
699 typedef std::string (
Object::* get_string_t)()
const;
701 typedef void (
Object::* set_fname_t)(std::string
const&);
703 typedef std::string (
Object::* get_fname_t)()
const;
705 typedef void (
Object::* set_vector_double_t)(std::vector<double>
const&);
709 typedef void (
Object::* set_vector_double_unit_t)(std::vector<double>
const&, std::string
const &);
713 typedef void (
Object::* set_vector_unsigned_long_t)(std::vector<unsigned long>
const&);
718 typedef void (
Object::* set_metric_t)
725 typedef void (
Object::* set_screen_t)
732 typedef void (
Object::* set_astrobj_t)
739 typedef void (
Object::* set_spectrum_t)
746 typedef void (
Object::* set_spectrometer_t)
757 set_double_t set_double;
759 set_unsigned_long_t set_unsigned_long;
760 set_size_t_t set_size_t;
762 set_string_t set_string;
763 set_vector_double_t set_vdouble;
764 set_vector_unsigned_long_t set_vulong;
765 set_metric_t set_metric;
766 set_screen_t set_screen;
767 set_astrobj_t set_astrobj;
768 set_spectrum_t set_spectrum;
769 set_spectrometer_t set_spectrometer;
776 get_double_t get_double;
778 get_unsigned_long_t get_unsigned_long;
779 get_size_t_t get_size_t;
781 get_string_t get_string;
782 get_vector_double_t get_vdouble;
783 get_vector_unsigned_long_t get_vulong;
784 get_metric_t get_metric;
785 get_screen_t get_screen;
786 get_astrobj_t get_astrobj;
787 get_spectrum_t get_spectrum;
788 get_spectrometer_t get_spectrometer;
795 set_double_unit_t set_double;
796 set_vector_double_unit_t set_vdouble;
800 get_double_unit_t get_double;
801 get_vector_double_unit_t get_vdouble;
828 operator bool()
const ;
837 Property(std::string classname, std::string doc=
"");
847 set_unsigned_long_t set_unsigned_long,
848 get_unsigned_long_t get_unsigned_long,
858 set_size_t_t set_size_t,
859 get_size_t_t get_size_t,
865 set_double_t set_double,
866 get_double_t get_double,
871 set_double_t set_double,
872 get_double_t get_double,
873 set_double_unit_t set_double_unit,
874 get_double_unit_t get_double_unit,
879 std::string name_false,
892 set_string_t set_string,
893 get_string_t get_string,
899 set_vector_double_t set_vdouble,
900 get_vector_double_t get_vdouble,
905 set_vector_double_t set_vdouble,
906 get_vector_double_t get_vdouble,
907 set_vector_double_unit_t set_vdouble_unit,
908 get_vector_double_unit_t get_vdouble_unit,
913 set_vector_unsigned_long_t set_vulong,
914 get_vector_unsigned_long_t get_vulong,
919 set_metric_t set_metric,
920 get_metric_t get_metric,
925 set_screen_t set_screen,
926 get_screen_t get_screen,
931 set_astrobj_t set_astrobj,
932 get_astrobj_t get_astrobj,
937 set_spectrum_t set_spectrum,
938 get_spectrum_t get_spectrum,
943 set_spectrometer_t set_spectrometer,
944 get_spectrometer_t get_spectrometer,
950 #define GYOTO_PROPERTY_CHOOSER(x, A, B, C, D, E, F, FUNC, ...) FUNC 952 #define GYOTO_PROPERTY_START_DOC(class, doc) \ 953 Property const class::properties[] = { \ 954 Property (#class, doc), 956 #define GYOTO_PROPERTY_START_NODOC(class) \ 957 GYOTO_PROPERTY_START_DOC(class, "") 960 #define GYOTO_PROPERTY_BOOL_DOC(class, name, namef, fname, doc) \ 964 (Gyoto::Property::set_bool_t)&class :: fname, \ 965 (Gyoto::Property::get_bool_t)&class :: fname, \ 967 #define GYOTO_PROPERTY_BOOL_NODOC(class, name, namef, fname) \ 968 GYOTO_PROPERTY_BOOL_DOC(class, name, namef, fname, "") 970 #define GYOTO_PROPERTY_DOUBLE_DOC(class, name, fname, doc) \ 973 (Gyoto::Property::set_double_t)&class::fname, \ 974 (Gyoto::Property::get_double_t)&class::fname, \ 976 #define GYOTO_PROPERTY_DOUBLE_NODOC(class, name, fname) \ 977 GYOTO_PROPERTY_DOUBLE_DOC(class, name, fname, "") 979 #define GYOTO_PROPERTY_LONG_DOC(class, name, fname, doc) \ 982 (Gyoto::Property::set_long_t)&class::fname, \ 983 (Gyoto::Property::get_long_t)&class::fname, \ 985 #define GYOTO_PROPERTY_LONG_NODOC(class, name, fname) \ 986 GYOTO_PROPERTY_LONG_DOC(class, name, fname, "") 988 #define GYOTO_PROPERTY_UNSIGNED_LONG_DOC(class, name, fname, doc) \ 991 (Gyoto::Property::set_unsigned_long_t)&class::fname, \ 992 (Gyoto::Property::get_unsigned_long_t)&class::fname, \ 994 #define GYOTO_PROPERTY_UNSIGNED_LONG_NODOC(class, name, fname) \ 995 GYOTO_PROPERTY_UNSIGNED_LONG_DOC(class, name, fname, "") 997 #define GYOTO_PROPERTY_SIZE_T_DOC(class, name, fname, doc) \ 1000 (Gyoto::Property::set_size_t_t)&class::fname, \ 1001 (Gyoto::Property::get_size_t_t)&class::fname, \ 1004 #define GYOTO_PROPERTY_SIZE_T_NODOC(class, name, fname) \ 1005 GYOTO_PROPERTY_SIZE_T_DOC(class, name, fname, "") 1007 #define GYOTO_PROPERTY_DOUBLE_UNIT_DOC(class, name, fname, doc) \ 1010 (Gyoto::Property::set_double_t)&class::fname, \ 1011 (Gyoto::Property::get_double_t)&class::fname, \ 1012 (Gyoto::Property::set_double_unit_t)&class::fname, \ 1013 (Gyoto::Property::get_double_unit_t)&class::fname, \ 1015 #define GYOTO_PROPERTY_DOUBLE_UNIT_NODOC(class, name, fname) \ 1016 GYOTO_PROPERTY_DOUBLE_UNIT_DOC(class, name, fname, "") 1018 #define GYOTO_PROPERTY_FILENAME_DOC(class, name, fname, doc) \ 1021 (Gyoto::Property::set_string_t)&class::fname, \ 1022 (Gyoto::Property::get_string_t)&class::fname, \ 1024 #define GYOTO_PROPERTY_FILENAME_NODOC(class, name, fname) \ 1025 GYOTO_PROPERTY_FILENAME_DOC(class, name, fname, "") 1027 #define GYOTO_PROPERTY_STRING_DOC(class, name, fname, doc) \ 1030 (Gyoto::Property::set_string_t)&class::fname, \ 1031 (Gyoto::Property::get_string_t)&class::fname, \ 1033 #define GYOTO_PROPERTY_STRING_NODOC(class, name, fname) \ 1034 GYOTO_PROPERTY_STRING_DOC(class, name, fname, "") 1036 #define GYOTO_PROPERTY_VECTOR_DOUBLE_DOC(class, name, fname, doc) \ 1039 (Gyoto::Property::set_vector_double_t)&class::fname, \ 1040 (Gyoto::Property::get_vector_double_t)&class::fname, \ 1042 #define GYOTO_PROPERTY_VECTOR_DOUBLE_NODOC(class, name, fname) \ 1043 GYOTO_PROPERTY_VECTOR_DOUBLE_DOC(class, name, fname, "") 1045 #define GYOTO_PROPERTY_VECTOR_DOUBLE_UNIT_DOC(class, name, fname, doc) \ 1048 (Gyoto::Property::set_vector_double_t)&class::fname, \ 1049 (Gyoto::Property::get_vector_double_t)&class::fname, \ 1050 (Gyoto::Property::set_vector_double_unit_t)&class::fname, \ 1051 (Gyoto::Property::get_vector_double_unit_t)&class::fname, \ 1053 #define GYOTO_PROPERTY_VECTOR_DOUBLE_UNIT_NODOC(class, name, fname) \ 1054 GYOTO_PROPERTY_VECTOR_DOUBLE_UNIT_DOC(class, name, fname, "") 1056 #define GYOTO_PROPERTY_VECTOR_UNSIGNED_LONG_DOC(class, name, fname, doc) \ 1059 (Gyoto::Property::set_vector_unsigned_long_t)&class::fname, \ 1060 (Gyoto::Property::get_vector_unsigned_long_t)&class::fname, \ 1062 #define GYOTO_PROPERTY_VECTOR_UNSIGNED_LONG_NODOC(class, name, fname) \ 1063 GYOTO_PROPERTY_VECTOR_UNSIGNED_LONG_DOC(class, name, fname, "") 1065 #define GYOTO_PROPERTY_METRIC_DOC(class, name, fname, doc) \ 1068 (Gyoto::Property::set_metric_t)&class::fname, \ 1069 (Gyoto::Property::get_metric_t)&class::fname, \ 1071 #define GYOTO_PROPERTY_METRIC_NODOC(class, name, fname) \ 1072 GYOTO_PROPERTY_METRIC_DOC(class, name, fname, "") 1074 #define GYOTO_PROPERTY_SCREEN_DOC(class, name, fname, doc) \ 1077 (Gyoto::Property::set_screen_t)&class::fname, \ 1078 (Gyoto::Property::get_screen_t)&class::fname, \ 1080 #define GYOTO_PROPERTY_SCREEN_NODOC(class, name, fname) \ 1081 GYOTO_PROPERTY_SCREEN_DOC(class, name, fname, "") 1083 #define GYOTO_PROPERTY_ASTROBJ_DOC(class, name, fname, doc) \ 1086 (Gyoto::Property::set_astrobj_t)&class::fname, \ 1087 (Gyoto::Property::get_astrobj_t)&class::fname, \ 1089 #define GYOTO_PROPERTY_ASTROBJ_NODOC(class, name, fname) \ 1090 GYOTO_PROPERTY_ASTROBJ_DOC(class, name, fname, "") 1092 #define GYOTO_PROPERTY_SPECTRUM_DOC(class, name, fname, doc) \ 1095 (Gyoto::Property::set_spectrum_t)&class::fname, \ 1096 (Gyoto::Property::get_spectrum_t)&class::fname, \ 1098 #define GYOTO_PROPERTY_SPECTRUM_NODOC(class, name, fname) \ 1099 GYOTO_PROPERTY_SPECTRUM_DOC(class, name, fname, "") 1101 #define GYOTO_PROPERTY_SPECTROMETER_DOC(class, name, fname, doc) \ 1104 (Gyoto::Property::set_spectrometer_t)&class::fname, \ 1105 (Gyoto::Property::get_spectrometer_t)&class::fname, \ 1107 #define GYOTO_PROPERTY_SPECTROMETER_NODOC(class, name, fname) \ 1108 GYOTO_PROPERTY_SPECTROMETER_DOC(class, name, fname, "") Union holding an accessor to set any type.
Definition: GyotoProperty.h:756
std::vector< unsigned long >(Object::* get_vector_unsigned_long_t)() const
Prototype for an accessor to get a std::vector<unsigned long>
Definition: GyotoProperty.h:715
Type is std::string and holds a file name.
Definition: GyotoProperty.h:638
Union holding an accessor to get any type.
Definition: GyotoProperty.h:775
Type is bool.
Definition: GyotoProperty.h:626
std::string name_false
Name if false.
Definition: GyotoProperty.h:668
Type is long.
Definition: GyotoProperty.h:620
#define size_t
If not defined in <sys/types.h>.
Definition: GyotoConfig.h:390
Type is Gyoto::SmartPointer<Gyoto::Metric::Generic>
Definition: GyotoProperty.h:644
setter_t setter
Pointer to the setter method.
Definition: GyotoProperty.h:808
std::string name
Name of this instance.
Definition: GyotoProperty.h:663
std::vector< double >(Object::* get_vector_double_t)() const
Prototype for an accessor to get a std::vector<double>
Definition: GyotoProperty.h:707
Type is std::vector<unsigned long>
Definition: GyotoProperty.h:642
Type is double.
Definition: GyotoProperty.h:618
Compile-time configuration.
type_e
Possible type of a Property instance.
Definition: GyotoProperty.h:616
Property that can be set and got using standard methods.
Definition: GyotoProperty.h:607
setter_unit_t setter_unit
Pointer to the setter (with unit) method.
Definition: GyotoProperty.h:818
getter_unit_t getter_unit
Pointer to the getter (with unit) method.
Definition: GyotoProperty.h:823
Type is Gyoto::SmartPointer<Gyoto::Spectrum::Generic>
Definition: GyotoProperty.h:650
int type
Type of this instance.
Definition: GyotoProperty.h:670
Union holding an accessor to get double or vector<double> with unit.
Definition: GyotoProperty.h:799
Namespace for the Gyoto library.
Definition: GyotoAstrobj.h:43
Union holding an accessor to set double or vector<double> with unit.
Definition: GyotoProperty.h:794
Type is Gyoto::SmartPointer<Gyoto::Spectrometer::Generic>
Definition: GyotoProperty.h:652
Pointers performing reference counting.
Definition: GyotoProperty.h:45
Type is std::vector<double>
Definition: GyotoProperty.h:640
Type is Gyoto::SmartPointer<Gyoto::Astrobj::Generic>
Definition: GyotoProperty.h:648
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.
Definition: GyotoProperty.h:711
Type is std::string.
Definition: GyotoProperty.h:628
Object with properties.
Definition: GyotoObject.h:151
Type is Gyoto::SmartPointer<Gyoto::Screen::Generic>
Definition: GyotoProperty.h:646
getter_t getter
Pointer to the getter method.
Definition: GyotoProperty.h:813
Type is unsigned long (a.k.a. size_t)
Definition: GyotoProperty.h:622
Type is size_t (only if distinct from unsigned long)
Definition: GyotoProperty.h:624
Property const *const parent
If type is empty_t, link to another Property list.
Definition: GyotoProperty.h:831