12523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan/* 22523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan * Copyright (C) 2012 The Android Open Source Project 32523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan * 42523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan * Licensed under the Apache License, Version 2.0 (the "License"); 52523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan * you may not use this file except in compliance with the License. 62523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan * You may obtain a copy of the License at 72523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan * 82523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan * http://www.apache.org/licenses/LICENSE-2.0 92523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan * 102523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan * Unless required by applicable law or agreed to in writing, software 112523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan * distributed under the License is distributed on an "AS IS" BASIS, 122523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan * See the License for the specific language governing permissions and 142523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan * limitations under the License. 152523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan */ 162523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan 17a16e7b50f3148f581439509279f242092e254309ztenghuipackage com.android.camera.exif; 182523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan 192272f8a6bfc8adca8ada7a215bef038d45256085Senpo Hu// TODO: Move this class to under util package. 20acc9b347ded215b08ea09263812525efafd91b13Earl Ou/** 21c274ded801f745d6318186958107622e7a4fef33Ruben Brunk * The rational data type of EXIF tag. Contains a pair of longs representing the 22c274ded801f745d6318186958107622e7a4fef33Ruben Brunk * numerator and denominator of a Rational number. 23acc9b347ded215b08ea09263812525efafd91b13Earl Ou */ 242523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyanpublic class Rational { 252523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan 26c274ded801f745d6318186958107622e7a4fef33Ruben Brunk private final long mNumerator; 272523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan private final long mDenominator; 282523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan 29c274ded801f745d6318186958107622e7a4fef33Ruben Brunk /** 30c274ded801f745d6318186958107622e7a4fef33Ruben Brunk * Create a Rational with a given numerator and denominator. 31c274ded801f745d6318186958107622e7a4fef33Ruben Brunk * 322272f8a6bfc8adca8ada7a215bef038d45256085Senpo Hu * @param numerator 33c274ded801f745d6318186958107622e7a4fef33Ruben Brunk * @param denominator 34c274ded801f745d6318186958107622e7a4fef33Ruben Brunk */ 352272f8a6bfc8adca8ada7a215bef038d45256085Senpo Hu public Rational(long numerator, long denominator) { 362272f8a6bfc8adca8ada7a215bef038d45256085Senpo Hu mNumerator = numerator; 372523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan mDenominator = denominator; 382523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan } 392523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan 40c274ded801f745d6318186958107622e7a4fef33Ruben Brunk /** 41c274ded801f745d6318186958107622e7a4fef33Ruben Brunk * Create a copy of a Rational. 42c274ded801f745d6318186958107622e7a4fef33Ruben Brunk */ 43c274ded801f745d6318186958107622e7a4fef33Ruben Brunk public Rational(Rational r) { 44c274ded801f745d6318186958107622e7a4fef33Ruben Brunk mNumerator = r.mNumerator; 45c274ded801f745d6318186958107622e7a4fef33Ruben Brunk mDenominator = r.mDenominator; 46c274ded801f745d6318186958107622e7a4fef33Ruben Brunk } 47c274ded801f745d6318186958107622e7a4fef33Ruben Brunk 48c274ded801f745d6318186958107622e7a4fef33Ruben Brunk /** 49c274ded801f745d6318186958107622e7a4fef33Ruben Brunk * Gets the numerator of the rational. 50acc9b347ded215b08ea09263812525efafd91b13Earl Ou */ 51c274ded801f745d6318186958107622e7a4fef33Ruben Brunk public long getNumerator() { 52c274ded801f745d6318186958107622e7a4fef33Ruben Brunk return mNumerator; 532523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan } 542523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan 55c274ded801f745d6318186958107622e7a4fef33Ruben Brunk /** 56acc9b347ded215b08ea09263812525efafd91b13Earl Ou * Gets the denominator of the rational 57acc9b347ded215b08ea09263812525efafd91b13Earl Ou */ 582523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan public long getDenominator() { 592523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan return mDenominator; 602523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan } 612523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan 62c274ded801f745d6318186958107622e7a4fef33Ruben Brunk /** 63c274ded801f745d6318186958107622e7a4fef33Ruben Brunk * Gets the rational value as type double. Will cause a divide-by-zero error 64c274ded801f745d6318186958107622e7a4fef33Ruben Brunk * if the denominator is 0. 65c274ded801f745d6318186958107622e7a4fef33Ruben Brunk */ 66c274ded801f745d6318186958107622e7a4fef33Ruben Brunk public double toDouble() { 67c274ded801f745d6318186958107622e7a4fef33Ruben Brunk return mNumerator / (double) mDenominator; 68c274ded801f745d6318186958107622e7a4fef33Ruben Brunk } 69c274ded801f745d6318186958107622e7a4fef33Ruben Brunk 702523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan @Override 712523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan public boolean equals(Object obj) { 72c274ded801f745d6318186958107622e7a4fef33Ruben Brunk if (obj == null) { 73c274ded801f745d6318186958107622e7a4fef33Ruben Brunk return false; 74c274ded801f745d6318186958107622e7a4fef33Ruben Brunk } 75c274ded801f745d6318186958107622e7a4fef33Ruben Brunk if (this == obj) { 76c274ded801f745d6318186958107622e7a4fef33Ruben Brunk return true; 77c274ded801f745d6318186958107622e7a4fef33Ruben Brunk } 782523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan if (obj instanceof Rational) { 792523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan Rational data = (Rational) obj; 80c274ded801f745d6318186958107622e7a4fef33Ruben Brunk return mNumerator == data.mNumerator && mDenominator == data.mDenominator; 812523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan } 822523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan return false; 832523f4344661b1e6a734d1ba20e92308c87a7c54Hung-ying Tyan } 84c56ddd3de2c9571e0561b1c7295b502927d7b1d4Earl Ou 85c56ddd3de2c9571e0561b1c7295b502927d7b1d4Earl Ou @Override 86c56ddd3de2c9571e0561b1c7295b502927d7b1d4Earl Ou public String toString() { 87c274ded801f745d6318186958107622e7a4fef33Ruben Brunk return mNumerator + "/" + mDenominator; 88c56ddd3de2c9571e0561b1c7295b502927d7b1d4Earl Ou } 89c274ded801f745d6318186958107622e7a4fef33Ruben Brunk} 90