1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.camera.exif;
18 
19 // TODO: Move this class to under util package.
20 /**
21  * The rational data type of EXIF tag. Contains a pair of longs representing the
22  * numerator and denominator of a Rational number.
23  */
24 public class Rational {
25 
26     private final long mNumerator;
27     private final long mDenominator;
28 
29     /**
30      * Create a Rational with a given numerator and denominator.
31      *
32      * @param numerator
33      * @param denominator
34      */
Rational(long numerator, long denominator)35     public Rational(long numerator, long denominator) {
36         mNumerator = numerator;
37         mDenominator = denominator;
38     }
39 
40     /**
41      * Create a copy of a Rational.
42      */
Rational(Rational r)43     public Rational(Rational r) {
44         mNumerator = r.mNumerator;
45         mDenominator = r.mDenominator;
46     }
47 
48     /**
49      * Gets the numerator of the rational.
50      */
getNumerator()51     public long getNumerator() {
52         return mNumerator;
53     }
54 
55     /**
56      * Gets the denominator of the rational
57      */
getDenominator()58     public long getDenominator() {
59         return mDenominator;
60     }
61 
62     /**
63      * Gets the rational value as type double. Will cause a divide-by-zero error
64      * if the denominator is 0.
65      */
toDouble()66     public double toDouble() {
67         return mNumerator / (double) mDenominator;
68     }
69 
70     @Override
equals(Object obj)71     public boolean equals(Object obj) {
72         if (obj == null) {
73             return false;
74         }
75         if (this == obj) {
76             return true;
77         }
78         if (obj instanceof Rational) {
79             Rational data = (Rational) obj;
80             return mNumerator == data.mNumerator && mDenominator == data.mDenominator;
81         }
82         return false;
83     }
84 
85     @Override
toString()86     public String toString() {
87         return mNumerator + "/" + mDenominator;
88     }
89 }
90