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