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