173e933f1f57002d2e593aa7b471811d8837f8767Earl Ou/* 273e933f1f57002d2e593aa7b471811d8837f8767Earl Ou * Copyright (C) 2012 The Android Open Source Project 373e933f1f57002d2e593aa7b471811d8837f8767Earl Ou * 473e933f1f57002d2e593aa7b471811d8837f8767Earl Ou * Licensed under the Apache License, Version 2.0 (the "License"); 573e933f1f57002d2e593aa7b471811d8837f8767Earl Ou * you may not use this file except in compliance with the License. 673e933f1f57002d2e593aa7b471811d8837f8767Earl Ou * You may obtain a copy of the License at 773e933f1f57002d2e593aa7b471811d8837f8767Earl Ou * 873e933f1f57002d2e593aa7b471811d8837f8767Earl Ou * http://www.apache.org/licenses/LICENSE-2.0 973e933f1f57002d2e593aa7b471811d8837f8767Earl Ou * 1073e933f1f57002d2e593aa7b471811d8837f8767Earl Ou * Unless required by applicable law or agreed to in writing, software 1173e933f1f57002d2e593aa7b471811d8837f8767Earl Ou * distributed under the License is distributed on an "AS IS" BASIS, 1273e933f1f57002d2e593aa7b471811d8837f8767Earl Ou * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1373e933f1f57002d2e593aa7b471811d8837f8767Earl Ou * See the License for the specific language governing permissions and 1473e933f1f57002d2e593aa7b471811d8837f8767Earl Ou * limitations under the License. 1573e933f1f57002d2e593aa7b471811d8837f8767Earl Ou */ 1673e933f1f57002d2e593aa7b471811d8837f8767Earl Ou 1773e933f1f57002d2e593aa7b471811d8837f8767Earl Oupackage com.android.gallery3d.exif; 1873e933f1f57002d2e593aa7b471811d8837f8767Earl Ou 191792070857f96943ae110869d66f092001ad526eEarl Ou/** 206e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk * The rational data type of EXIF tag. Contains a pair of longs representing the 216e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk * numerator and denominator of a Rational number. 221792070857f96943ae110869d66f092001ad526eEarl Ou */ 2373e933f1f57002d2e593aa7b471811d8837f8767Earl Oupublic class Rational { 2473e933f1f57002d2e593aa7b471811d8837f8767Earl Ou 256e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk private final long mNumerator; 2673e933f1f57002d2e593aa7b471811d8837f8767Earl Ou private final long mDenominator; 2773e933f1f57002d2e593aa7b471811d8837f8767Earl Ou 286e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk /** 296e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk * Create a Rational with a given numerator and denominator. 306e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk * 316e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk * @param nominator 326e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk * @param denominator 336e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk */ 3473e933f1f57002d2e593aa7b471811d8837f8767Earl Ou public Rational(long nominator, long denominator) { 356e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk mNumerator = nominator; 3673e933f1f57002d2e593aa7b471811d8837f8767Earl Ou mDenominator = denominator; 3773e933f1f57002d2e593aa7b471811d8837f8767Earl Ou } 3873e933f1f57002d2e593aa7b471811d8837f8767Earl Ou 396e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk /** 406e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk * Create a copy of a Rational. 416e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk */ 426e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk public Rational(Rational r) { 436e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk mNumerator = r.mNumerator; 446e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk mDenominator = r.mDenominator; 456e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk } 466e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk 476e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk /** 486e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk * Gets the numerator of the rational. 491792070857f96943ae110869d66f092001ad526eEarl Ou */ 506e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk public long getNumerator() { 516e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk return mNumerator; 5273e933f1f57002d2e593aa7b471811d8837f8767Earl Ou } 5373e933f1f57002d2e593aa7b471811d8837f8767Earl Ou 546e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk /** 551792070857f96943ae110869d66f092001ad526eEarl Ou * Gets the denominator of the rational 561792070857f96943ae110869d66f092001ad526eEarl Ou */ 5773e933f1f57002d2e593aa7b471811d8837f8767Earl Ou public long getDenominator() { 5873e933f1f57002d2e593aa7b471811d8837f8767Earl Ou return mDenominator; 5973e933f1f57002d2e593aa7b471811d8837f8767Earl Ou } 60cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ou 616e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk /** 626e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk * Gets the rational value as type double. Will cause a divide-by-zero error 636e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk * if the denominator is 0. 646e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk */ 656e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk public double toDouble() { 666e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk return mNumerator / (double) mDenominator; 676e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk } 686e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk 69cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ou @Override 70cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ou public boolean equals(Object obj) { 716e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk if (obj == null) { 726e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk return false; 736e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk } 746e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk if (this == obj) { 756e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk return true; 766e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk } 77cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ou if (obj instanceof Rational) { 78cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ou Rational data = (Rational) obj; 796e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk return mNumerator == data.mNumerator && mDenominator == data.mDenominator; 80cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ou } 81cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ou return false; 82cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ou } 83ca56f8e30a4d91c7b7e6f75a39a1a69801e49cbbEarl Ou 84ca56f8e30a4d91c7b7e6f75a39a1a69801e49cbbEarl Ou @Override 85ca56f8e30a4d91c7b7e6f75a39a1a69801e49cbbEarl Ou public String toString() { 866e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk return mNumerator + "/" + mDenominator; 87ca56f8e30a4d91c7b7e6f75a39a1a69801e49cbbEarl Ou } 886e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk} 89