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