C++程序  |  150行  |  2.53 KB

/*****************************************************************************/
// 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_rational.h#2 $ */ 
/* $DateTime: 2012/07/31 22:04:34 $ */
/* $Change: 840853 $ */
/* $Author: tknoll $ */

/** \file
 * Signed and unsigned rational data types.
 */

/*****************************************************************************/

#ifndef __dng_rational__
#define __dng_rational__

/*****************************************************************************/

#include "dng_types.h"

/*****************************************************************************/

class dng_srational
	{
	
	public:
	
		int32 n;		// Numerator
		int32 d;		// Denominator
		
	public:
	
		dng_srational ()
			:	n (0)
			,	d (0)
			{
			}
			
		dng_srational (int32 nn, int32 dd)
			:	n (nn)
			,	d (dd)
			{
			}

		void Clear ()
			{
			n = 0;
			d = 0;
			}

		bool IsValid () const
			{
			return d != 0;
			}
			
		bool NotValid () const
			{
			return !IsValid ();
			}
			
		bool operator== (const dng_srational &r) const
			{
			return (n == r.n) &&
				   (d == r.d);
			}
			
		bool operator!= (const dng_srational &r) const
			{
			return !(*this == r);
			}
			
		real64 As_real64 () const;
		
		void Set_real64 (real64 x, int32 dd = 0);

		void ReduceByFactor (int32 factor);
		
	};

/*****************************************************************************/

class dng_urational
	{
	
	public:
	
		uint32 n;		// Numerator
		uint32 d;		// Denominator
		
	public:
	
		dng_urational ()
			:	n (0)
			,	d (0)
			{
			}
			
		dng_urational (uint32 nn, uint32 dd)
			:	n (nn)
			,	d (dd)
			{
			}
			
		void Clear ()
			{
			n = 0;
			d = 0;
			}

		bool IsValid () const
			{
			return d != 0;
			}
			
		bool NotValid () const
			{
			return !IsValid ();
			}
			
		bool operator== (const dng_urational &r) const
			{
			return (n == r.n) &&
				   (d == r.d);
			}
			
		bool operator!= (const dng_urational &r) const
			{
			return !(*this == r);
			}
			
		real64 As_real64 () const;

		void Set_real64 (real64 x, uint32 dd = 0);

		void ReduceByFactor (uint32 factor);
		
	};

/*****************************************************************************/

#endif
	
/*****************************************************************************/