1 /*****************************************************************************/
2 // Copyright 2006 Adobe Systems Incorporated
3 // All Rights Reserved.
4 //
5 // NOTICE: Adobe permits you to use, modify, and distribute this file in
6 // accordance with the terms of the Adobe license agreement accompanying it.
7 /*****************************************************************************/
8
9 /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_point.h#1 $ */
10 /* $DateTime: 2012/05/30 13:28:51 $ */
11 /* $Change: 832332 $ */
12 /* $Author: tknoll $ */
13
14 /*****************************************************************************/
15
16 #ifndef __dng_point__
17 #define __dng_point__
18
19 /*****************************************************************************/
20
21 #include "dng_safe_arithmetic.h"
22 #include "dng_types.h"
23 #include "dng_utils.h"
24
25 /*****************************************************************************/
26
27 class dng_point
28 {
29
30 public:
31
32 int32 v;
33 int32 h;
34
35 public:
36
dng_point()37 dng_point ()
38 : v (0)
39 , h (0)
40 {
41 }
42
dng_point(int32 vv,int32 hh)43 dng_point (int32 vv, int32 hh)
44 : v (vv)
45 , h (hh)
46 {
47 }
48
49 bool operator== (const dng_point &pt) const
50 {
51 return (v == pt.v) &&
52 (h == pt.h);
53 }
54
55 bool operator!= (const dng_point &pt) const
56 {
57 return !(*this == pt);
58 }
59
60 };
61
62 /*****************************************************************************/
63
64 class dng_point_real64
65 {
66
67 public:
68
69 real64 v;
70 real64 h;
71
72 public:
73
dng_point_real64()74 dng_point_real64 ()
75 : v (0.0)
76 , h (0.0)
77 {
78 }
79
dng_point_real64(real64 vv,real64 hh)80 dng_point_real64 (real64 vv, real64 hh)
81 : v (vv)
82 , h (hh)
83 {
84 }
85
dng_point_real64(const dng_point & pt)86 dng_point_real64 (const dng_point &pt)
87 : v ((real64) pt.v)
88 , h ((real64) pt.h)
89 {
90 }
91
92 bool operator== (const dng_point_real64 &pt) const
93 {
94 return (v == pt.v) &&
95 (h == pt.h);
96 }
97
98 bool operator!= (const dng_point_real64 &pt) const
99 {
100 return !(*this == pt);
101 }
102
Round()103 dng_point Round () const
104 {
105 return dng_point (Round_int32 (v),
106 Round_int32 (h));
107 }
108
109 };
110
111 /*****************************************************************************/
112
113 inline dng_point operator+ (const dng_point &a,
114 const dng_point &b)
115
116
117 {
118
119 return dng_point (SafeInt32Add(a.v, b.v),
120 SafeInt32Add(a.h, b.h));
121
122 }
123
124 /*****************************************************************************/
125
126 inline dng_point_real64 operator+ (const dng_point_real64 &a,
127 const dng_point_real64 &b)
128
129
130 {
131
132 return dng_point_real64 (a.v + b.v,
133 a.h + b.h);
134
135 }
136
137 /*****************************************************************************/
138
139 inline dng_point operator- (const dng_point &a,
140 const dng_point &b)
141
142
143 {
144
145 return dng_point (SafeInt32Sub(a.v, b.v),
146 SafeInt32Sub(a.h, b.h));
147
148 }
149
150 /*****************************************************************************/
151
152 inline dng_point_real64 operator- (const dng_point_real64 &a,
153 const dng_point_real64 &b)
154
155
156 {
157
158 return dng_point_real64 (a.v - b.v,
159 a.h - b.h);
160
161 }
162
163 /*****************************************************************************/
164
DistanceSquared(const dng_point_real64 & a,const dng_point_real64 & b)165 inline real64 DistanceSquared (const dng_point_real64 &a,
166 const dng_point_real64 &b)
167
168
169 {
170
171 dng_point_real64 diff = a - b;
172
173 return (diff.v * diff.v) + (diff.h * diff.h);
174
175 }
176
177 /*****************************************************************************/
178
Transpose(const dng_point & a)179 inline dng_point Transpose (const dng_point &a)
180 {
181
182 return dng_point (a.h, a.v);
183
184 }
185
186 /*****************************************************************************/
187
Transpose(const dng_point_real64 & a)188 inline dng_point_real64 Transpose (const dng_point_real64 &a)
189 {
190
191 return dng_point_real64 (a.h, a.v);
192
193 }
194
195 /*****************************************************************************/
196
197 #endif
198
199 /*****************************************************************************/
200