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
27class dng_point
28	{
29
30	public:
31
32		int32 v;
33		int32 h;
34
35	public:
36
37		dng_point ()
38			:	v (0)
39			,	h (0)
40			{
41			}
42
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
64class dng_point_real64
65	{
66
67	public:
68
69		real64 v;
70		real64 h;
71
72	public:
73
74		dng_point_real64 ()
75			:	v (0.0)
76			,	h (0.0)
77			{
78			}
79
80		dng_point_real64 (real64 vv, real64 hh)
81			:	v (vv)
82			,	h (hh)
83			{
84			}
85
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
103		dng_point Round () const
104			{
105			return dng_point (Round_int32 (v),
106							  Round_int32 (h));
107			}
108
109	};
110
111/*****************************************************************************/
112
113inline 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
126inline 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
139inline 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
152inline 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
165inline 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
179inline dng_point Transpose (const dng_point &a)
180	{
181
182	return dng_point (a.h, a.v);
183
184	}
185
186/*****************************************************************************/
187
188inline 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