aboutsummaryrefslogtreecommitdiffstats
path: root/unit.h
blob: 03651cf30cc8a75645f077ab8a73593d3f6bc590 (plain) (blame)
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
#define STANDARD_PRESSURE millibar(1013)
#define STANDARD_TEMPERATURE celsius(20)


typedef double AngularSpeed;
typedef AngularSpeed (*AngularSpeedMaker)(double);
typedef double (*AngularSpeedReader)(AngularSpeed);

AngularSpeed rad_per_sec(double x);
AngularSpeed deg_per_sec(double x);
AngularSpeed rpm(double x);
double as_rad_per_sec(AngularSpeed x);
double as_deg_per_sec(AngularSpeed x);
double as_rpm(AngularSpeed x);


typedef double Fraction;
typedef Fraction (*FractionMaker)(double);
typedef double (*FractionReader)(Fraction);

Fraction percent(double x);
double as_percent(double x);


typedef double Pressure;
typedef Pressure (*PressureMaker)(double);
typedef double (*PressureReader)(Pressure);

Pressure pascal(double x);
Pressure millibar(double x);
Pressure kilopascal(double x);
Pressure bar(double x);
Pressure psi(double x);
Pressure inch_mercury(double x);
double as_pascal(Pressure x);
double as_millibar(Pressure x);
double as_kilopascal(Pressure x);
double as_bar(Pressure x);
double as_psi(Pressure x);
double as_inch_mercury(Pressure x);

extern const size_t n_pressure_units;
extern const char *const pressure_units[];
extern const PressureMaker pressure_makers[];
extern const PressureReader pressure_readers[];


typedef double Temperature;
typedef Temperature (*TemperatureMaker)(double);
typedef double (*TemperatureReader)(Temperature);

Temperature kelvin(double x);
Temperature celsius(double x);
Temperature fahrenheit(double x);
Temperature rankine(double x);
double as_kelvin(Temperature t);
double as_celsius(Temperature t);
double as_fahrenheit(Temperature t);
double as_rankine(Temperature t);

extern const size_t n_temperature_units;
extern const char *const temperature_units[];
extern const TemperatureMaker temperature_makers[];
extern const TemperatureReader temperature_readers[];


typedef double Volume;
typedef Volume (*VolumeMaker)(double);
typedef double (*VolumeReader)(Volume);

Volume cubic_centimetre(double x);
Volume litre(double x);
Volume cubic_metre(double x);
Volume cubic_inch(double x);
double as_cubic_centimetre(Volume x);
double as_litre(Volume x);
double as_cubic_metre(double x);
double as_cubic_inch(double x);

extern const size_t n_volume_units;
extern const char *const volume_units[];
extern const VolumeMaker volume_makers[];
extern const VolumeReader volume_readers[];


typedef double VolumeFlowRate;
typedef VolumeFlowRate (*VolumeFlowRateMaker)(double);
typedef double (*VolumeFlowRateReader)(VolumeFlowRate);

VolumeFlowRate cubic_metre_per_sec(double x);
VolumeFlowRate cubic_metre_per_min(double x);
VolumeFlowRate cubic_foot_per_min(double x);
double as_cubic_metre_per_sec(VolumeFlowRate x);
double as_cubic_metre_per_min(VolumeFlowRate x);
double as_cubic_foot_per_min(VolumeFlowRate x);

extern const size_t n_volume_flow_rate_units;
extern const char *const volume_flow_rate_units[];
extern const VolumeFlowRateMaker volume_flow_rate_makers[];
extern const VolumeFlowRateReader volume_flow_rate_readers[];


typedef double MassFlowRate;
typedef MassFlowRate (*MassFlowRateMaker)(double);
typedef double (*MassFlowRateReader)(MassFlowRate);

MassFlowRate kilo_per_sec(double x);
MassFlowRate pound_per_min(double x);
double as_kilo_per_sec(MassFlowRate m);
double as_pound_per_min(MassFlowRate m);

extern const size_t n_mass_flow_rate_units;
extern const char *const mass_flow_rate_units[];
extern const MassFlowRateMaker mass_flow_rate_makers[];
extern const MassFlowRateReader mass_flow_rate_readers[];