Home | History | Annotate | Download | only in source
      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 
     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 
     64 class 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 
    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 
    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 
    179 inline dng_point Transpose (const dng_point &a)
    180 	{
    181 
    182 	return dng_point (a.h, a.v);
    183 
    184 	}
    185 
    186 /*****************************************************************************/
    187 
    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