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.h#2 $ */
10/* $DateTime: 2012/07/31 22:04:34 $ */
11/* $Change: 840853 $ */
12/* $Author: tknoll $ */
13
14/** \file
15 * Signed and unsigned rational data types.
16 */
17
18/*****************************************************************************/
19
20#ifndef __dng_rational__
21#define __dng_rational__
22
23/*****************************************************************************/
24
25#include "dng_types.h"
26
27/*****************************************************************************/
28
29class dng_srational
30 {
31
32 public:
33
34 int32 n; // Numerator
35 int32 d; // Denominator
36
37 public:
38
39 dng_srational ()
40 : n (0)
41 , d (0)
42 {
43 }
44
45 dng_srational (int32 nn, int32 dd)
46 : n (nn)
47 , d (dd)
48 {
49 }
50
51 void Clear ()
52 {
53 n = 0;
54 d = 0;
55 }
56
57 bool IsValid () const
58 {
59 return d != 0;
60 }
61
62 bool NotValid () const
63 {
64 return !IsValid ();
65 }
66
67 bool operator== (const dng_srational &r) const
68 {
69 return (n == r.n) &&
70 (d == r.d);
71 }
72
73 bool operator!= (const dng_srational &r) const
74 {
75 return !(*this == r);
76 }
77
78 real64 As_real64 () const;
79
80 void Set_real64 (real64 x, int32 dd = 0);
81
82 void ReduceByFactor (int32 factor);
83
84 };
85
86/*****************************************************************************/
87
88class dng_urational
89 {
90
91 public:
92
93 uint32 n; // Numerator
94 uint32 d; // Denominator
95
96 public:
97
98 dng_urational ()
99 : n (0)
100 , d (0)
101 {
102 }
103
104 dng_urational (uint32 nn, uint32 dd)
105 : n (nn)
106 , d (dd)
107 {
108 }
109
110 void Clear ()
111 {
112 n = 0;
113 d = 0;
114 }
115
116 bool IsValid () const
117 {
118 return d != 0;
119 }
120
121 bool NotValid () const
122 {
123 return !IsValid ();
124 }
125
126 bool operator== (const dng_urational &r) const
127 {
128 return (n == r.n) &&
129 (d == r.d);
130 }
131
132 bool operator!= (const dng_urational &r) const
133 {
134 return !(*this == r);
135 }
136
137 real64 As_real64 () const;
138
139 void Set_real64 (real64 x, uint32 dd = 0);
140
141 void ReduceByFactor (uint32 factor);
142
143 };
144
145/*****************************************************************************/
146
147#endif
148
149/*****************************************************************************/
150