Sync-to-go: update copyright for 2015
[s-roff.git] / src / troff / hvunits.h
blob7f4a357d90c2fdc1c0745fe531864abafbc167f2
1 /*@
2 * Copyright (c) 2014 - 2015 Steffen (Daode) Nurpmeso <sdaoden@users.sf.net>.
4 * Copyright (C) 1989 - 1992 Free Software Foundation, Inc.
5 * Written by James Clark (jjc@jclark.com)
7 * This is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License as published by the Free
9 * Software Foundation; either version 2, or (at your option) any later
10 * version.
12 * This is distributed in the hope that it will be useful, but WITHOUT ANY
13 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 * for more details.
17 * You should have received a copy of the GNU General Public License along
18 * with groff; see the file COPYING. If not, write to the Free Software
19 * Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA.
21 #ifndef _HVUNITS_H
22 #define _HVUNITS_H
24 #include "config.h"
25 #include "troff-config.h"
27 class vunits
29 friend inline vunits scale(vunits n, units x, units y); // scale n by x/y
30 friend inline vunits scale(vunits n, vunits x, vunits y);
31 friend inline vunits operator +(const vunits&, const vunits&);
32 friend inline vunits operator -(const vunits&, const vunits&);
33 friend inline vunits operator -(const vunits&);
34 friend inline int operator /(const vunits&, const vunits&);
35 friend inline vunits operator /(const vunits&, int);
36 friend inline vunits operator *(const vunits&, int);
37 friend inline vunits operator *(int, const vunits&);
38 friend inline int operator <(const vunits&, const vunits&);
39 friend inline int operator >(const vunits&, const vunits&);
40 friend inline int operator <=(const vunits&, const vunits&);
41 friend inline int operator >=(const vunits&, const vunits&);
42 friend inline int operator ==(const vunits&, const vunits&);
43 friend inline int operator !=(const vunits&, const vunits&);
45 int n;
47 public:
48 vunits();
49 vunits(units);
50 units to_units();
51 int is_zero();
52 vunits& operator+=(const vunits&);
53 vunits& operator-=(const vunits&);
56 extern vunits V0;
58 class hunits
60 friend inline hunits scale(hunits n, units x, units y); // scale n by x/y
61 friend inline hunits scale(hunits n, double x);
62 friend inline hunits operator +(const hunits&, const hunits&);
63 friend inline hunits operator -(const hunits&, const hunits&);
64 friend inline hunits operator -(const hunits&);
65 friend inline int operator /(const hunits&, const hunits&);
66 friend inline hunits operator /(const hunits&, int);
67 friend inline hunits operator *(const hunits&, int);
68 friend inline hunits operator *(int, const hunits&);
69 friend inline int operator <(const hunits&, const hunits&);
70 friend inline int operator >(const hunits&, const hunits&);
71 friend inline int operator <=(const hunits&, const hunits&);
72 friend inline int operator >=(const hunits&, const hunits&);
73 friend inline int operator ==(const hunits&, const hunits&);
74 friend inline int operator !=(const hunits&, const hunits&);
76 int n;
78 public:
79 hunits();
80 hunits(units);
81 units to_units();
82 int is_zero();
83 hunits& operator+=(const hunits&);
84 hunits& operator-=(const hunits&);
87 extern hunits H0;
89 extern int get_vunits(vunits *, unsigned char si);
90 extern int get_hunits(hunits *, unsigned char si);
91 extern int get_vunits(vunits *, unsigned char si, vunits prev_value);
92 extern int get_hunits(hunits *, unsigned char si, hunits prev_value);
94 inline vunits:: vunits() : n(0)
98 inline units vunits::to_units()
100 return n*vresolution;
103 inline int vunits::is_zero()
105 return n == 0;
108 inline vunits operator +(const vunits & x, const vunits & y)
110 vunits r;
111 r = x;
112 r.n += y.n;
113 return r;
116 inline vunits operator -(const vunits & x, const vunits & y)
118 vunits r;
119 r = x;
120 r.n -= y.n;
121 return r;
124 inline vunits operator -(const vunits & x)
126 vunits r;
127 r.n = -x.n;
128 return r;
131 inline int operator /(const vunits & x, const vunits & y)
133 return x.n/y.n;
136 inline vunits operator /(const vunits & x, int n)
138 vunits r;
139 r = x;
140 r.n /= n;
141 return r;
144 inline vunits operator *(const vunits & x, int n)
146 vunits r;
147 r = x;
148 r.n *= n;
149 return r;
152 inline vunits operator *(int n, const vunits & x)
154 vunits r;
155 r = x;
156 r.n *= n;
157 return r;
160 inline int operator <(const vunits & x, const vunits & y)
162 return x.n < y.n;
165 inline int operator >(const vunits & x, const vunits & y)
167 return x.n > y.n;
170 inline int operator <=(const vunits & x, const vunits & y)
172 return x.n <= y.n;
175 inline int operator >=(const vunits & x, const vunits & y)
177 return x.n >= y.n;
180 inline int operator ==(const vunits & x, const vunits & y)
182 return x.n == y.n;
185 inline int operator !=(const vunits & x, const vunits & y)
187 return x.n != y.n;
191 inline vunits& vunits::operator+=(const vunits & x)
193 n += x.n;
194 return *this;
197 inline vunits& vunits::operator-=(const vunits & x)
199 n -= x.n;
200 return *this;
203 inline hunits:: hunits() : n(0)
207 inline units hunits::to_units()
209 return n*hresolution;
212 inline int hunits::is_zero()
214 return n == 0;
217 inline hunits operator +(const hunits & x, const hunits & y)
219 hunits r;
220 r = x;
221 r.n += y.n;
222 return r;
225 inline hunits operator -(const hunits & x, const hunits & y)
227 hunits r;
228 r = x;
229 r.n -= y.n;
230 return r;
233 inline hunits operator -(const hunits & x)
235 hunits r;
236 r = x;
237 r.n = -x.n;
238 return r;
241 inline int operator /(const hunits & x, const hunits & y)
243 return x.n/y.n;
246 inline hunits operator /(const hunits & x, int n)
248 hunits r;
249 r = x;
250 r.n /= n;
251 return r;
254 inline hunits operator *(const hunits & x, int n)
256 hunits r;
257 r = x;
258 r.n *= n;
259 return r;
262 inline hunits operator *(int n, const hunits & x)
264 hunits r;
265 r = x;
266 r.n *= n;
267 return r;
270 inline int operator <(const hunits & x, const hunits & y)
272 return x.n < y.n;
275 inline int operator >(const hunits & x, const hunits & y)
277 return x.n > y.n;
280 inline int operator <=(const hunits & x, const hunits & y)
282 return x.n <= y.n;
285 inline int operator >=(const hunits & x, const hunits & y)
287 return x.n >= y.n;
290 inline int operator ==(const hunits & x, const hunits & y)
292 return x.n == y.n;
295 inline int operator !=(const hunits & x, const hunits & y)
297 return x.n != y.n;
300 inline hunits& hunits::operator+=(const hunits & x)
302 n += x.n;
303 return *this;
306 inline hunits& hunits::operator-=(const hunits & x)
308 n -= x.n;
309 return *this;
312 inline hunits scale(hunits n, units x, units y)
314 hunits r;
315 r.n = scale(n.n, x, y);
316 return r;
319 inline vunits scale(vunits n, units x, units y)
321 vunits r;
322 r.n = scale(n.n, x, y);
323 return r;
326 inline vunits scale(vunits n, vunits x, vunits y)
328 vunits r;
329 r.n = scale(n.n, x.n, y.n);
330 return r;
333 inline hunits scale(hunits n, double x)
335 hunits r;
336 r.n = int(n.n*x);
337 return r;
340 inline units scale(units n, double x)
342 return int(n*x);
345 inline units points_to_units(units n)
347 return scale(n, units_per_inch, 72);
350 #endif // _HVUNITS_H
351 // s-it2-mode