/*****************************************************************************/ // Copyright 2006 Adobe Systems Incorporated // All Rights Reserved. // // NOTICE: Adobe permits you to use, modify, and distribute this file in // accordance with the terms of the Adobe license agreement accompanying it. /*****************************************************************************/ /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_point.h#1 $ */ /* $DateTime: 2012/05/30 13:28:51 $ */ /* $Change: 832332 $ */ /* $Author: tknoll $ */ /*****************************************************************************/ #ifndef __dng_point__ #define __dng_point__ /*****************************************************************************/ #include "dng_safe_arithmetic.h" #include "dng_types.h" #include "dng_utils.h" /*****************************************************************************/ class dng_point { public: int32 v; int32 h; public: dng_point () : v (0) , h (0) { } dng_point (int32 vv, int32 hh) : v (vv) , h (hh) { } bool operator== (const dng_point &pt) const { return (v == pt.v) && (h == pt.h); } bool operator!= (const dng_point &pt) const { return !(*this == pt); } }; /*****************************************************************************/ class dng_point_real64 { public: real64 v; real64 h; public: dng_point_real64 () : v (0.0) , h (0.0) { } dng_point_real64 (real64 vv, real64 hh) : v (vv) , h (hh) { } dng_point_real64 (const dng_point &pt) : v ((real64) pt.v) , h ((real64) pt.h) { } bool operator== (const dng_point_real64 &pt) const { return (v == pt.v) && (h == pt.h); } bool operator!= (const dng_point_real64 &pt) const { return !(*this == pt); } dng_point Round () const { return dng_point (Round_int32 (v), Round_int32 (h)); } }; /*****************************************************************************/ inline dng_point operator+ (const dng_point &a, const dng_point &b) { return dng_point (SafeInt32Add(a.v, b.v), SafeInt32Add(a.h, b.h)); } /*****************************************************************************/ inline dng_point_real64 operator+ (const dng_point_real64 &a, const dng_point_real64 &b) { return dng_point_real64 (a.v + b.v, a.h + b.h); } /*****************************************************************************/ inline dng_point operator- (const dng_point &a, const dng_point &b) { return dng_point (SafeInt32Sub(a.v, b.v), SafeInt32Sub(a.h, b.h)); } /*****************************************************************************/ inline dng_point_real64 operator- (const dng_point_real64 &a, const dng_point_real64 &b) { return dng_point_real64 (a.v - b.v, a.h - b.h); } /*****************************************************************************/ inline real64 DistanceSquared (const dng_point_real64 &a, const dng_point_real64 &b) { dng_point_real64 diff = a - b; return (diff.v * diff.v) + (diff.h * diff.h); } /*****************************************************************************/ inline dng_point Transpose (const dng_point &a) { return dng_point (a.h, a.v); } /*****************************************************************************/ inline dng_point_real64 Transpose (const dng_point_real64 &a) { return dng_point_real64 (a.h, a.v); } /*****************************************************************************/ #endif /*****************************************************************************/