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