26 #ifndef __GyotoProperty_H_ 27 #define __GyotoProperty_H_ 36 namespace Metric {
class Generic; }
37 namespace Astrobj {
class Generic; }
38 namespace Spectrum {
class Generic; }
39 namespace Spectrometer {
class Generic; }
50 #define GYOTO_PROPERTY_ACCESSORS(class, type, member, method) \ 51 void class::method(type v) {member=v;} \ 52 type class::method() const {return member;} 65 #define GYOTO_PROPERTY_ACCESSORS_GEOMETRICAL(class, member, method, metric) \ 66 GYOTO_PROPERTY_ACCESSORS(class, double, member, method) \ 67 void class::method(double v, std::string const &u) { \ 68 member=Units::ToGeometrical(v, u, metric); \ 70 double class::method(std::string const &u) const { \ 71 return Units::FromGeometrical(member, u, metric); \ 79 #define GYOTO_PROPERTY_START(...) \ 80 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 81 "wrong number of arguments", \ 82 "wrong number of arguments", \ 83 "wrong number of arguments", \ 84 "wrong number of arguments", \ 85 GYOTO_PROPERTY_START_DOC(__VA_ARGS__), \ 86 GYOTO_PROPERTY_START_NODOC(__VA_ARGS__), \ 87 "wrong number of arguments" \ 102 #define GYOTO_PROPERTY_BOOL(...) \ 103 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 104 "wrong number of arguments", \ 105 GYOTO_PROPERTY_BOOL_DOC(__VA_ARGS__), \ 106 GYOTO_PROPERTY_BOOL_NODOC(__VA_ARGS__), \ 107 "wrong number of arguments", \ 108 "wrong number of arguments", \ 109 "wrong number of arguments", \ 110 "wrong number of arguments" \ 123 #define GYOTO_PROPERTY_DOUBLE(...) \ 124 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 127 GYOTO_PROPERTY_DOUBLE_DOC(__VA_ARGS__), \ 128 GYOTO_PROPERTY_DOUBLE_NODOC(__VA_ARGS__), \ 145 #define GYOTO_PROPERTY_DOUBLE_UNIT(...) \ 146 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 149 GYOTO_PROPERTY_DOUBLE_UNIT_DOC(__VA_ARGS__), \ 150 GYOTO_PROPERTY_DOUBLE_UNIT_NODOC(__VA_ARGS__), \ 166 #define GYOTO_PROPERTY_VECTOR_DOUBLE(...) \ 167 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 170 GYOTO_PROPERTY_VECTOR_DOUBLE_DOC(__VA_ARGS__), \ 171 GYOTO_PROPERTY_VECTOR_DOUBLE_NODOC(__VA_ARGS__), \ 187 #define GYOTO_PROPERTY_VECTOR_DOUBLE_UNIT(...) \ 188 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 191 GYOTO_PROPERTY_VECTOR_DOUBLE_UNIT_DOC(__VA_ARGS__), \ 192 GYOTO_PROPERTY_VECTOR_DOUBLE_UNIT_NODOC(__VA_ARGS__), \ 208 #define GYOTO_PROPERTY_STRING(...) \ 209 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 212 GYOTO_PROPERTY_STRING_DOC(__VA_ARGS__), \ 213 GYOTO_PROPERTY_STRING_NODOC(__VA_ARGS__), \ 229 #define GYOTO_PROPERTY_FILENAME(...) \ 230 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 233 GYOTO_PROPERTY_FILENAME_DOC(__VA_ARGS__), \ 234 GYOTO_PROPERTY_FILENAME_NODOC(__VA_ARGS__), \ 250 #define GYOTO_PROPERTY_LONG(...) \ 251 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 254 GYOTO_PROPERTY_LONG_DOC(__VA_ARGS__), \ 255 GYOTO_PROPERTY_LONG_NODOC(__VA_ARGS__), \ 271 #define GYOTO_PROPERTY_UNSIGNED_LONG(...) \ 272 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 275 GYOTO_PROPERTY_UNSIGNED_LONG_DOC(__VA_ARGS__), \ 276 GYOTO_PROPERTY_UNSIGNED_LONG_NODOC(__VA_ARGS__), \ 292 #define GYOTO_PROPERTY_VECTOR_UNSIGNED_LONG(...) \ 293 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 296 GYOTO_PROPERTY_VECTOR_UNSIGNED_LONG_DOC(__VA_ARGS__), \ 297 GYOTO_PROPERTY_VECTOR_UNSIGNED_LONG_NODOC(__VA_ARGS__), \ 313 #define GYOTO_PROPERTY_SIZE_T(...) \ 314 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 317 GYOTO_PROPERTY_SIZE_T_DOC(__VA_ARGS__), \ 318 GYOTO_PROPERTY_SIZE_T_NODOC(__VA_ARGS__), \ 334 #define GYOTO_PROPERTY_METRIC(...) \ 335 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 338 GYOTO_PROPERTY_METRIC_DOC(__VA_ARGS__), \ 339 GYOTO_PROPERTY_METRIC_NODOC(__VA_ARGS__), \ 356 #define GYOTO_PROPERTY_SPECTRUM(...) \ 357 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 360 GYOTO_PROPERTY_SPECTRUM_DOC(__VA_ARGS__), \ 361 GYOTO_PROPERTY_SPECTRUM_NODOC(__VA_ARGS__), \ 378 #define GYOTO_PROPERTY_ASTROBJ(...) \ 379 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 382 GYOTO_PROPERTY_ASTROBJ_DOC(__VA_ARGS__), \ 383 GYOTO_PROPERTY_ASTROBJ_NODOC(__VA_ARGS__), \ 400 #define GYOTO_PROPERTY_SCREEN(...) \ 401 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 404 GYOTO_PROPERTY_SCREEN_DOC(__VA_ARGS__), \ 405 GYOTO_PROPERTY_SCREEN_NODOC(__VA_ARGS__), \ 422 #define GYOTO_PROPERTY_SPECTROMETER(...) \ 423 GYOTO_PROPERTY_CHOOSER(,##__VA_ARGS__, \ 426 GYOTO_PROPERTY_SPECTROMETER_DOC(__VA_ARGS__), \ 427 GYOTO_PROPERTY_SPECTROMETER_NODOC(__VA_ARGS__), \ 434 #define GYOTO_PROPERTY_END(class, next) \ 436 Gyoto::Property const * class::getProperties() const { \ 437 return class::properties; \ 598 typedef void (
Object::* set_double_t)(
double val);
600 typedef double (
Object::* get_double_t)()
const;
602 typedef void (
Object::* set_double_unit_t)(
double val,
603 std::string
const &unit);
605 typedef double (
Object::* get_double_unit_t)(std::string
const &unit)
const;
607 typedef void (
Object::* set_long_t)(
long val);
609 typedef long (
Object::* get_long_t)()
const;
611 typedef void (
Object::* set_unsigned_long_t)(
unsigned long val);
613 typedef unsigned long (
Object::* get_unsigned_long_t)()
const;
615 typedef void (
Object::* set_size_t_t)(
size_t val);
619 typedef void (
Object::* set_bool_t)(
bool val);
621 typedef bool (
Object::* get_bool_t)()
const;
623 typedef void (
Object::* set_string_t)(std::string
const&);
625 typedef std::string (
Object::* get_string_t)()
const;
627 typedef void (
Object::* set_fname_t)(std::string
const&);
629 typedef std::string (
Object::* get_fname_t)()
const;
631 typedef void (
Object::* set_vector_double_t)(std::vector<double>
const&);
635 typedef void (
Object::* set_vector_double_unit_t)(std::vector<double>
const&, std::string
const &);
639 typedef void (
Object::* set_vector_unsigned_long_t)(std::vector<unsigned long>
const&);
644 typedef void (
Object::* set_metric_t)
651 typedef void (
Object::* set_screen_t)
658 typedef void (
Object::* set_astrobj_t)
665 typedef void (
Object::* set_spectrum_t)
672 typedef void (
Object::* set_spectrometer_t)
683 set_double_t set_double;
685 set_unsigned_long_t set_unsigned_long;
686 set_size_t_t set_size_t;
688 set_string_t set_string;
689 set_vector_double_t set_vdouble;
690 set_vector_unsigned_long_t set_vulong;
691 set_metric_t set_metric;
692 set_screen_t set_screen;
693 set_astrobj_t set_astrobj;
694 set_spectrum_t set_spectrum;
695 set_spectrometer_t set_spectrometer;
702 get_double_t get_double;
704 get_unsigned_long_t get_unsigned_long;
705 get_size_t_t get_size_t;
707 get_string_t get_string;
708 get_vector_double_t get_vdouble;
709 get_vector_unsigned_long_t get_vulong;
710 get_metric_t get_metric;
711 get_screen_t get_screen;
712 get_astrobj_t get_astrobj;
713 get_spectrum_t get_spectrum;
714 get_spectrometer_t get_spectrometer;
721 set_double_unit_t set_double;
722 set_vector_double_unit_t set_vdouble;
726 get_double_unit_t get_double;
727 get_vector_double_unit_t get_vdouble;
754 operator bool()
const ;
763 Property(std::string classname, std::string doc=
"");
773 set_unsigned_long_t set_unsigned_long,
774 get_unsigned_long_t get_unsigned_long,
784 set_size_t_t set_size_t,
785 get_size_t_t get_size_t,
791 set_double_t set_double,
792 get_double_t get_double,
797 set_double_t set_double,
798 get_double_t get_double,
799 set_double_unit_t set_double_unit,
800 get_double_unit_t get_double_unit,
805 std::string name_false,
818 set_string_t set_string,
819 get_string_t get_string,
825 set_vector_double_t set_vdouble,
826 get_vector_double_t get_vdouble,
831 set_vector_double_t set_vdouble,
832 get_vector_double_t get_vdouble,
833 set_vector_double_unit_t set_vdouble_unit,
834 get_vector_double_unit_t get_vdouble_unit,
839 set_vector_unsigned_long_t set_vulong,
840 get_vector_unsigned_long_t get_vulong,
845 set_metric_t set_metric,
846 get_metric_t get_metric,
851 set_screen_t set_screen,
852 get_screen_t get_screen,
857 set_astrobj_t set_astrobj,
858 get_astrobj_t get_astrobj,
863 set_spectrum_t set_spectrum,
864 get_spectrum_t get_spectrum,
869 set_spectrometer_t set_spectrometer,
870 get_spectrometer_t get_spectrometer,
876 #define GYOTO_PROPERTY_CHOOSER(x, A, B, C, D, E, F, FUNC, ...) FUNC 878 #define GYOTO_PROPERTY_START_DOC(class, doc) \ 879 Property const class::properties[] = { \ 880 Property (#class, doc), 882 #define GYOTO_PROPERTY_START_NODOC(class) \ 883 GYOTO_PROPERTY_START_DOC(class, "") 886 #define GYOTO_PROPERTY_BOOL_DOC(class, name, namef, fname, doc) \ 890 (Gyoto::Property::set_bool_t)&class :: fname, \ 891 (Gyoto::Property::get_bool_t)&class :: fname, \ 893 #define GYOTO_PROPERTY_BOOL_NODOC(class, name, namef, fname) \ 894 GYOTO_PROPERTY_BOOL_DOC(class, name, namef, fname, "") 896 #define GYOTO_PROPERTY_DOUBLE_DOC(class, name, fname, doc) \ 899 (Gyoto::Property::set_double_t)&class::fname, \ 900 (Gyoto::Property::get_double_t)&class::fname, \ 902 #define GYOTO_PROPERTY_DOUBLE_NODOC(class, name, fname) \ 903 GYOTO_PROPERTY_DOUBLE_DOC(class, name, fname, "") 905 #define GYOTO_PROPERTY_LONG_DOC(class, name, fname, doc) \ 908 (Gyoto::Property::set_long_t)&class::fname, \ 909 (Gyoto::Property::get_long_t)&class::fname, \ 911 #define GYOTO_PROPERTY_LONG_NODOC(class, name, fname) \ 912 GYOTO_PROPERTY_LONG_DOC(class, name, fname, "") 914 #define GYOTO_PROPERTY_UNSIGNED_LONG_DOC(class, name, fname, doc) \ 917 (Gyoto::Property::set_unsigned_long_t)&class::fname, \ 918 (Gyoto::Property::get_unsigned_long_t)&class::fname, \ 920 #define GYOTO_PROPERTY_UNSIGNED_LONG_NODOC(class, name, fname) \ 921 GYOTO_PROPERTY_UNSIGNED_LONG_DOC(class, name, fname, "") 923 #define GYOTO_PROPERTY_SIZE_T_DOC(class, name, fname, doc) \ 926 (Gyoto::Property::set_size_t_t)&class::fname, \ 927 (Gyoto::Property::get_size_t_t)&class::fname, \ 930 #define GYOTO_PROPERTY_SIZE_T_NODOC(class, name, fname) \ 931 GYOTO_PROPERTY_SIZE_T_DOC(class, name, fname, "") 933 #define GYOTO_PROPERTY_DOUBLE_UNIT_DOC(class, name, fname, doc) \ 936 (Gyoto::Property::set_double_t)&class::fname, \ 937 (Gyoto::Property::get_double_t)&class::fname, \ 938 (Gyoto::Property::set_double_unit_t)&class::fname, \ 939 (Gyoto::Property::get_double_unit_t)&class::fname, \ 941 #define GYOTO_PROPERTY_DOUBLE_UNIT_NODOC(class, name, fname) \ 942 GYOTO_PROPERTY_DOUBLE_UNIT_DOC(class, name, fname, "") 944 #define GYOTO_PROPERTY_FILENAME_DOC(class, name, fname, doc) \ 947 (Gyoto::Property::set_string_t)&class::fname, \ 948 (Gyoto::Property::get_string_t)&class::fname, \ 950 #define GYOTO_PROPERTY_FILENAME_NODOC(class, name, fname) \ 951 GYOTO_PROPERTY_FILENAME_DOC(class, name, fname, "") 953 #define GYOTO_PROPERTY_STRING_DOC(class, name, fname, doc) \ 956 (Gyoto::Property::set_string_t)&class::fname, \ 957 (Gyoto::Property::get_string_t)&class::fname, \ 959 #define GYOTO_PROPERTY_STRING_NODOC(class, name, fname) \ 960 GYOTO_PROPERTY_STRING_DOC(class, name, fname, "") 962 #define GYOTO_PROPERTY_VECTOR_DOUBLE_DOC(class, name, fname, doc) \ 965 (Gyoto::Property::set_vector_double_t)&class::fname, \ 966 (Gyoto::Property::get_vector_double_t)&class::fname, \ 968 #define GYOTO_PROPERTY_VECTOR_DOUBLE_NODOC(class, name, fname) \ 969 GYOTO_PROPERTY_VECTOR_DOUBLE_DOC(class, name, fname, "") 971 #define GYOTO_PROPERTY_VECTOR_DOUBLE_UNIT_DOC(class, name, fname, doc) \ 974 (Gyoto::Property::set_vector_double_t)&class::fname, \ 975 (Gyoto::Property::get_vector_double_t)&class::fname, \ 976 (Gyoto::Property::set_vector_double_unit_t)&class::fname, \ 977 (Gyoto::Property::get_vector_double_unit_t)&class::fname, \ 979 #define GYOTO_PROPERTY_VECTOR_DOUBLE_UNIT_NODOC(class, name, fname) \ 980 GYOTO_PROPERTY_VECTOR_DOUBLE_UNIT_DOC(class, name, fname, "") 982 #define GYOTO_PROPERTY_VECTOR_UNSIGNED_LONG_DOC(class, name, fname, doc) \ 985 (Gyoto::Property::set_vector_unsigned_long_t)&class::fname, \ 986 (Gyoto::Property::get_vector_unsigned_long_t)&class::fname, \ 988 #define GYOTO_PROPERTY_VECTOR_UNSIGNED_LONG_NODOC(class, name, fname) \ 989 GYOTO_PROPERTY_VECTOR_UNSIGNED_LONG_DOC(class, name, fname, "") 991 #define GYOTO_PROPERTY_METRIC_DOC(class, name, fname, doc) \ 994 (Gyoto::Property::set_metric_t)&class::fname, \ 995 (Gyoto::Property::get_metric_t)&class::fname, \ 997 #define GYOTO_PROPERTY_METRIC_NODOC(class, name, fname) \ 998 GYOTO_PROPERTY_METRIC_DOC(class, name, fname, "") 1000 #define GYOTO_PROPERTY_SCREEN_DOC(class, name, fname, doc) \ 1003 (Gyoto::Property::set_screen_t)&class::fname, \ 1004 (Gyoto::Property::get_screen_t)&class::fname, \ 1006 #define GYOTO_PROPERTY_SCREEN_NODOC(class, name, fname) \ 1007 GYOTO_PROPERTY_SCREEN_DOC(class, name, fname, "") 1009 #define GYOTO_PROPERTY_ASTROBJ_DOC(class, name, fname, doc) \ 1012 (Gyoto::Property::set_astrobj_t)&class::fname, \ 1013 (Gyoto::Property::get_astrobj_t)&class::fname, \ 1015 #define GYOTO_PROPERTY_ASTROBJ_NODOC(class, name, fname) \ 1016 GYOTO_PROPERTY_ASTROBJ_DOC(class, name, fname, "") 1018 #define GYOTO_PROPERTY_SPECTRUM_DOC(class, name, fname, doc) \ 1021 (Gyoto::Property::set_spectrum_t)&class::fname, \ 1022 (Gyoto::Property::get_spectrum_t)&class::fname, \ 1024 #define GYOTO_PROPERTY_SPECTRUM_NODOC(class, name, fname) \ 1025 GYOTO_PROPERTY_SPECTRUM_DOC(class, name, fname, "") 1027 #define GYOTO_PROPERTY_SPECTROMETER_DOC(class, name, fname, doc) \ 1030 (Gyoto::Property::set_spectrometer_t)&class::fname, \ 1031 (Gyoto::Property::get_spectrometer_t)&class::fname, \ 1033 #define GYOTO_PROPERTY_SPECTROMETER_NODOC(class, name, fname) \ 1034 GYOTO_PROPERTY_SPECTROMETER_DOC(class, name, fname, "") Union holding an accessor to set any type.
Definition: GyotoProperty.h:682
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:641
Type is std::string and holds a file name.
Definition: GyotoProperty.h:564
Union holding an accessor to get any type.
Definition: GyotoProperty.h:701
Type is bool.
Definition: GyotoProperty.h:552
std::string name_false
Name if false.
Definition: GyotoProperty.h:594
Type is long.
Definition: GyotoProperty.h:546
#define size_t
If not defined in <sys/types.h>.
Definition: GyotoConfig.h:354
Type is Gyoto::SmartPointer<Gyoto::Metric::Generic>
Definition: GyotoProperty.h:570
setter_t setter
Pointer to the setter method.
Definition: GyotoProperty.h:734
std::string name
Name of this instance.
Definition: GyotoProperty.h:589
std::vector< double >(Object::* get_vector_double_t)() const
Prototype for an accessor to get a std::vector<double>
Definition: GyotoProperty.h:633
Type is std::vector<unsigned long>
Definition: GyotoProperty.h:568
Type is double.
Definition: GyotoProperty.h:544
Compile-time configuration.
type_e
Possible type of a Property instance.
Definition: GyotoProperty.h:542
Property that can be set and got using standard methods.
Definition: GyotoProperty.h:533
setter_unit_t setter_unit
Pointer to the setter (with unit) method.
Definition: GyotoProperty.h:744
getter_unit_t getter_unit
Pointer to the getter (with unit) method.
Definition: GyotoProperty.h:749
Type is Gyoto::SmartPointer<Gyoto::Spectrum::Generic>
Definition: GyotoProperty.h:576
int type
Type of this instance.
Definition: GyotoProperty.h:596
Union holding an accessor to get double or vector<double> with unit.
Definition: GyotoProperty.h:725
Namespace for the Gyoto library.
Definition: GyotoAstrobj.h:43
Union holding an accessor to set double or vector<double> with unit.
Definition: GyotoProperty.h:720
Type is Gyoto::SmartPointer<Gyoto::Spectrometer::Generic>
Definition: GyotoProperty.h:578
Pointers performing reference counting.
Definition: GyotoProperty.h:41
Type is std::vector<double>
Definition: GyotoProperty.h:566
Type is Gyoto::SmartPointer<Gyoto::Astrobj::Generic>
Definition: GyotoProperty.h:574
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:637
Type is std::string.
Definition: GyotoProperty.h:554
Object with properties.
Definition: GyotoObject.h:136
Type is Gyoto::SmartPointer<Gyoto::Screen::Generic>
Definition: GyotoProperty.h:572
getter_t getter
Pointer to the getter method.
Definition: GyotoProperty.h:739
Type is unsigned long (a.k.a. size_t)
Definition: GyotoProperty.h:548
Type is size_t (only if distinct from unsigned long)
Definition: GyotoProperty.h:550
Property const *const parent
If type is empty_t, link to another Property list.
Definition: GyotoProperty.h:757