| /*****************************************************************************/ |
| // 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 |
| |
| /*****************************************************************************/ |