18e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 28e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// Copyright 2006 Adobe Systems Incorporated 38e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// All Rights Reserved. 48e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// 58e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// NOTICE: Adobe permits you to use, modify, and distribute this file in 68e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener// accordance with the terms of the Adobe license agreement accompanying it. 78e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 88e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 98e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_point.h#1 $ */ 108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $DateTime: 2012/05/30 13:28:51 $ */ 118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Change: 832332 $ */ 128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/* $Author: tknoll $ */ 138e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#ifndef __dng_point__ 178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#define __dng_point__ 188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_safe_arithmetic.h" 227841298310de58d0cddb212ac6295d9a27cf547cFlorian Kriener#include "dng_types.h" 238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#include "dng_utils.h" 248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 268e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 278e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerclass dng_point 288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener public: 318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener int32 v; 338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener int32 h; 348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener public: 368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_point () 388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : v (0) 398e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , h (0) 408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_point (int32 vv, int32 hh) 448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : v (vv) 458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , h (hh) 468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool operator== (const dng_point &pt) const 508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return (v == pt.v) && 528e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener (h == pt.h); 538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool operator!= (const dng_point &pt) const 568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return !(*this == pt); 588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener }; 618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 648e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerclass dng_point_real64 658e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener public: 688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener real64 v; 708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener real64 h; 718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener public: 738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_point_real64 () 758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : v (0.0) 768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , h (0.0) 778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 798e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_point_real64 (real64 vv, real64 hh) 818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : v (vv) 828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , h (hh) 838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_point_real64 (const dng_point &pt) 878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener : v ((real64) pt.v) 888e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener , h ((real64) pt.h) 898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool operator== (const dng_point_real64 &pt) const 938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return (v == pt.v) && 958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener (h == pt.h); 968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener bool operator!= (const dng_point_real64 &pt) const 998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1008e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return !(*this == pt); 1018e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1028e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1038e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_point Round () const 1048e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1058e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return dng_point (Round_int32 (v), 1068e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener Round_int32 (h)); 1078e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1088e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1098e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener }; 1108e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1118e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1128e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1138e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerinline dng_point operator+ (const dng_point &a, 1148e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_point &b) 1158e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1168e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1178e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1188e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1198e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return dng_point (SafeInt32Add(a.v, b.v), 1208e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener SafeInt32Add(a.h, b.h)); 1218e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1228e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1238e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1248e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1258e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1268e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerinline dng_point_real64 operator+ (const dng_point_real64 &a, 1278e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_point_real64 &b) 1288e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1298e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1308e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1318e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1328e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return dng_point_real64 (a.v + b.v, 1338e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener a.h + b.h); 1348e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1358e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1368e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1378e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1388e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1398e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerinline dng_point operator- (const dng_point &a, 1408e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_point &b) 1418e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1428e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1438e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1448e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1458e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return dng_point (SafeInt32Sub(a.v, b.v), 1468e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener SafeInt32Sub(a.h, b.h)); 1478e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1488e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1498e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1508e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1518e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1528e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerinline dng_point_real64 operator- (const dng_point_real64 &a, 1538e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_point_real64 &b) 1548e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1558e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1568e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1578e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1588e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return dng_point_real64 (a.v - b.v, 1598e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener a.h - b.h); 1608e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1618e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1628e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1638e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1648e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1658e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerinline real64 DistanceSquared (const dng_point_real64 &a, 1668e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener const dng_point_real64 &b) 1678e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1688e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1698e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1708e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1718e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener dng_point_real64 diff = a - b; 1728e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1738e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return (diff.v * diff.v) + (diff.h * diff.h); 1748e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1758e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1768e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1778e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1788e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1798e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerinline dng_point Transpose (const dng_point &a) 1808e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1818e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1828e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return dng_point (a.h, a.v); 1838e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1848e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1858e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1868e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1878e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1888e8939fc10ad63576a2785ba1333a23726b7e164Florian Krienerinline dng_point_real64 Transpose (const dng_point_real64 &a) 1898e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener { 1908e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1918e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener return dng_point_real64 (a.h, a.v); 1928e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1938e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener } 1948e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1958e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 1968e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1978e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener#endif 1988e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener 1998e8939fc10ad63576a2785ba1333a23726b7e164Florian Kriener/*****************************************************************************/ 200