File: Property.C

package info (click to toggle)
gyoto 2.0.2-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,444 kB
  • sloc: cpp: 42,330; sh: 4,512; python: 3,436; xml: 2,865; makefile: 691; ansic: 346
file content (120 lines) | stat: -rw-r--r-- 3,379 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include "GyotoProperty.h"
#include "GyotoError.h"

using namespace std ;
using namespace Gyoto ;

Property::Property()
  : name(""), type(empty_t), parent(NULL) {}

Property::Property(std::string n, int t)
  : name(n), type(t), parent(NULL) {}

Property::Property(Property const * const ancestors)
  : name(""), type(empty_t), parent(ancestors) {}

Property::Property(std::string classname, std::string doc)
  : name(classname), type(empty_t), parent(NULL), doc(doc){}

#define GYOTO_LOCAL(T)							\
  Property::Property(string n, set_##T##_t set, get_##T##_t get, string d) \
    : name(n), type(T##_t), parent(NULL), doc(d) {			\
    setter.set_##T=set;							\
    getter.get_##T=get;							\
  }

GYOTO_LOCAL(long)
GYOTO_LOCAL(unsigned_long)
GYOTO_LOCAL(metric)
GYOTO_LOCAL(spectrum)
GYOTO_LOCAL(astrobj)
GYOTO_LOCAL(screen)
GYOTO_LOCAL(spectrometer)

#undef GYOTO_LOCAL

Property::Property(string n, set_size_t_t set, get_size_t_t get, int,
		   string d)
: name(n), type(size_t_t), parent(NULL), doc(d) {
  setter.set_size_t=set;
  getter.get_size_t=get;
}

Property::Property(string n, set_double_t set, get_double_t get, string d)
: name(n), type(double_t), parent(NULL), doc(d) {
  setter.set_double=set;
  getter.get_double=get;
  setter_unit.set_double=NULL;
  getter_unit.get_double=NULL;
}

Property::Property(string n, set_double_t set, get_double_t get,
		   set_double_unit_t setu, get_double_unit_t getu, string d)
  : name(n), type(double_t), parent(NULL), doc(d) {
  setter.set_double=set;
  getter.get_double=get;
  setter_unit.set_double=setu;
  getter_unit.get_double=getu;
}

Property::Property(string n, string nf, set_bool_t set, get_bool_t get,
		   string d)
  : name(n), name_false(nf), type(bool_t), parent(NULL), doc(d) {
  setter.set_bool=set;
  getter.get_bool=get;
}

Property::Property(string n, set_string_t set, get_string_t get,
		   bool is_filename, string d)
  : name(n), type(is_filename?filename_t:string_t), parent(NULL), doc(d) {
  setter.set_string=set;
  getter.get_string=get;
}

Property::Property(string n,
		   set_vector_double_t set,
		   get_vector_double_t get,
		   string d)
  : name(n), type(vector_double_t), parent(NULL), doc(d) {
  setter.set_vdouble=set;
  getter.get_vdouble=get;
  setter_unit.set_vdouble=NULL;
  getter_unit.get_vdouble=NULL;
}

Property::Property(string n,
		   set_vector_double_t set,
		   get_vector_double_t get,
		   set_vector_double_unit_t setu,
		   get_vector_double_unit_t getu,
		   string d)
  : name(n), type(vector_double_t), parent(NULL), doc(d) {
  setter.set_vdouble=set;
  getter.get_vdouble=get;
  setter_unit.set_vdouble=setu;
  getter_unit.get_vdouble=getu;
}

Property::Property(string n,
		   set_vector_unsigned_long_t set,
		   get_vector_unsigned_long_t get,
		   string d)
  : name(n), type(vector_unsigned_long_t), parent(NULL), doc(d) {
  setter.set_vulong=set;
  getter.get_vulong=get;
}

Property::operator bool() const { return type != empty_t || name != ""; }

Property::type_e Property::typeFromString(std::string stype) {
  if (stype=="double") {
    return Property::double_t;
  } else if (stype=="vector_double") {
    return Property::vector_double_t;
  } else if (stype=="spectrum") {
    return Property::spectrum_t;
  } else {
    GYOTO_ERROR("unimplemeted Python property type");
  }
  return Property::empty_t; // avoid warning, will never reach here
}