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