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