• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*****************************************************************************/
2 // Copyright 2006 Adobe Systems Incorporated
3 // All Rights Reserved.
4 //
5 // NOTICE:  Adobe permits you to use, modify, and distribute this file in
6 // accordance with the terms of the Adobe license agreement accompanying it.
7 /*****************************************************************************/
8 
9 /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_rational.cpp#1 $ */
10 /* $DateTime: 2012/05/30 13:28:51 $ */
11 /* $Change: 832332 $ */
12 /* $Author: tknoll $ */
13 
14 /*****************************************************************************/
15 
16 #include "dng_rational.h"
17 
18 #include "dng_utils.h"
19 
20 /*****************************************************************************/
21 
As_real64() const22 real64 dng_srational::As_real64 () const
23 	{
24 
25 	if (d)
26 		return (real64) n / (real64) d;
27 
28 	else
29 		return 0.0;
30 
31 	}
32 
33 /*****************************************************************************/
34 
Set_real64(real64 x,int32 dd)35 void dng_srational::Set_real64 (real64 x, int32 dd)
36 	{
37 
38 	if (x == 0.0)
39 		{
40 
41 		*this = dng_srational (0, 1);
42 
43 		}
44 
45 	if (dd == 0)
46 		{
47 
48 		real64 y = Abs_real64 (x);
49 
50 		if (y >= 32768.0)
51 			{
52 			dd = 1;
53 			}
54 
55 		else if (y >= 1.0)
56 			{
57 			dd = 32768;
58 			}
59 
60 		else
61 			{
62 			dd = 32768 * 32768;
63 			}
64 
65 		}
66 
67 	*this = dng_srational (Round_int32 (x * dd), dd);
68 
69 	}
70 
71 /*****************************************************************************/
72 
ReduceByFactor(int32 factor)73 void dng_srational::ReduceByFactor (int32 factor)
74 	{
75 
76 	while (n % factor == 0 &&
77 		   d % factor == 0 &&
78 		   d >= factor)
79 		{
80 		n /= factor;
81 		d /= factor;
82 		}
83 
84 	}
85 
86 /*****************************************************************************/
87 
As_real64() const88 real64 dng_urational::As_real64 () const
89 	{
90 
91 	if (d)
92 		return (real64) n / (real64) d;
93 
94 	else
95 		return 0.0;
96 
97 	}
98 
99 /*****************************************************************************/
100 
Set_real64(real64 x,uint32 dd)101 void dng_urational::Set_real64 (real64 x, uint32 dd)
102 	{
103 
104 	if (x <= 0.0)
105 		{
106 
107 		*this = dng_urational (0, 1);
108 
109 		}
110 
111 	if (dd == 0)
112 		{
113 
114 		if (x >= 32768.0)
115 			{
116 			dd = 1;
117 			}
118 
119 		else if (x >= 1.0)
120 			{
121 			dd = 32768;
122 			}
123 
124 		else
125 			{
126 			dd = 32768 * 32768;
127 			}
128 
129 		}
130 
131 	*this = dng_urational (Round_uint32 (x * dd), dd);
132 
133 	}
134 
135 /*****************************************************************************/
136 
ReduceByFactor(uint32 factor)137 void dng_urational::ReduceByFactor (uint32 factor)
138 	{
139 
140 	while (n % factor == 0 &&
141 		   d % factor == 0 &&
142 		   d >= factor)
143 		{
144 		n /= factor;
145 		d /= factor;
146 		}
147 
148 	}
149 
150 /*****************************************************************************/
151