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