10b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 20b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// Copyright 2006 Adobe Systems Incorporated 30b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// All Rights Reserved. 40b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// 50b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// NOTICE: Adobe permits you to use, modify, and distribute this file in 60b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// accordance with the terms of the Adobe license agreement accompanying it. 70b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 80b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 90b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_point.h#1 $ */ 100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $DateTime: 2012/05/30 13:28:51 $ */ 110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Change: 832332 $ */ 120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Author: tknoll $ */ 130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifndef __dng_point__ 170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define __dng_point__ 180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2129c7498fabe2e3c87a85b487bfe9d783c401e1f0Yujie Qin#include "dng_safe_arithmetic.h" 22c89552e7ed1e0ea69c69addf2bb5de011188d297Florian Kriener#include "dng_types.h" 230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_utils.h" 240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_point 280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int32 v; 330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int32 h; 340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_point () 380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : v (0) 390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , h (0) 400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_point (int32 vv, int32 hh) 440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : v (vv) 450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , h (hh) 460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool operator== (const dng_point &pt) const 500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return (v == pt.v) && 520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener (h == pt.h); 530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool operator!= (const dng_point &pt) const 560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return !(*this == pt); 580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_point_real64 650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener real64 v; 700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener real64 h; 710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_point_real64 () 750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : v (0.0) 760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , h (0.0) 770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_point_real64 (real64 vv, real64 hh) 810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : v (vv) 820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , h (hh) 830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_point_real64 (const dng_point &pt) 870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener : v ((real64) pt.v) 880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener , h ((real64) pt.h) 890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool operator== (const dng_point_real64 &pt) const 930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return (v == pt.v) && 950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener (h == pt.h); 960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool operator!= (const dng_point_real64 &pt) const 990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return !(*this == pt); 1010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_point Round () const 1040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return dng_point (Round_int32 (v), 1060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener Round_int32 (h)); 1070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 1100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerinline dng_point operator+ (const dng_point &a, 1140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_point &b) 1150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return dng_point (SafeInt32Add(a.v, b.v), 1200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener SafeInt32Add(a.h, b.h)); 1210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerinline dng_point_real64 operator+ (const dng_point_real64 &a, 1270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_point_real64 &b) 1280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return dng_point_real64 (a.v + b.v, 1330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener a.h + b.h); 1340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerinline dng_point operator- (const dng_point &a, 1400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_point &b) 1410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return dng_point (SafeInt32Sub(a.v, b.v), 1460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener SafeInt32Sub(a.h, b.h)); 1470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerinline dng_point_real64 operator- (const dng_point_real64 &a, 1530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_point_real64 &b) 1540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return dng_point_real64 (a.v - b.v, 1590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener a.h - b.h); 1600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerinline real64 DistanceSquared (const dng_point_real64 &a, 1660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_point_real64 &b) 1670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_point_real64 diff = a - b; 1720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return (diff.v * diff.v) + (diff.h * diff.h); 1740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerinline dng_point Transpose (const dng_point &a) 1800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return dng_point (a.h, a.v); 1830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerinline dng_point_real64 Transpose (const dng_point_real64 &a) 1890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return dng_point_real64 (a.h, a.v); 1920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 1980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 200