EMMA Coverage Report (generated Tue Oct 28 00:01:11 GMT 2008)
[all classes][org.joda.time.field]

COVERAGE SUMMARY FOR SOURCE FILE [PreciseDurationField.java]

nameclass, %method, %block, %line, %
PreciseDurationField.java100% (1/1)100% (11/11)100% (102/102)100% (24/24)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class PreciseDurationField100% (1/1)100% (11/11)100% (102/102)100% (24/24)
PreciseDurationField (DurationFieldType, long): void 100% (1/1)100% (7/7)100% (3/3)
add (long, int): long 100% (1/1)100% (10/10)100% (2/2)
add (long, long): long 100% (1/1)100% (9/9)100% (2/2)
equals (Object): boolean 100% (1/1)100% (28/28)100% (6/6)
getDifferenceAsLong (long, long): long 100% (1/1)100% (9/9)100% (2/2)
getMillis (int, long): long 100% (1/1)100% (6/6)100% (1/1)
getMillis (long, long): long 100% (1/1)100% (5/5)100% (1/1)
getUnitMillis (): long 100% (1/1)100% (3/3)100% (1/1)
getValueAsLong (long, long): long 100% (1/1)100% (5/5)100% (1/1)
hashCode (): int 100% (1/1)100% (18/18)100% (4/4)
isPrecise (): boolean 100% (1/1)100% (2/2)100% (1/1)

1/*
2 *  Copyright 2001-2005 Stephen Colebourne
3 *
4 *  Licensed under the Apache License, Version 2.0 (the "License");
5 *  you may not use this file except in compliance with the License.
6 *  You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 *  Unless required by applicable law or agreed to in writing, software
11 *  distributed under the License is distributed on an "AS IS" BASIS,
12 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 *  See the License for the specific language governing permissions and
14 *  limitations under the License.
15 */
16package org.joda.time.field;
17 
18import org.joda.time.DurationFieldType;
19 
20/**
21 * Duration field class representing a field with a fixed unit length.
22 * <p>
23 * PreciseDurationField is thread-safe and immutable.
24 * 
25 * @author Stephen Colebourne
26 * @author Brian S O'Neill
27 * @since 1.0
28 */
29public class PreciseDurationField extends BaseDurationField {
30    
31    private static final long serialVersionUID = -8346152187724495365L;
32 
33    /** The size of the unit */
34    private final long iUnitMillis;
35 
36    /**
37     * Constructor.
38     * 
39     * @param type  the field type
40     * @param unitMillis  the unit milliseconds
41     */    
42    public PreciseDurationField(DurationFieldType type, long unitMillis) {
43        super(type);
44        iUnitMillis = unitMillis;
45    }
46    
47    //------------------------------------------------------------------------
48    /**
49     * This field is precise.
50     * 
51     * @return true always
52     */
53    public final boolean isPrecise() {
54        return true;
55    }
56    
57    /**
58     * Returns the amount of milliseconds per unit value of this field.
59     *
60     * @return the unit size of this field, in milliseconds
61     */
62    public final long getUnitMillis() {
63        return iUnitMillis;
64    }
65 
66    //------------------------------------------------------------------------
67    /**
68     * Get the value of this field from the milliseconds.
69     * 
70     * @param duration  the milliseconds to query, which may be negative
71     * @param instant  ignored
72     * @return the value of the field, in the units of the field, which may be
73     * negative
74     */
75    public long getValueAsLong(long duration, long instant) {
76        return duration / iUnitMillis;  // safe
77    }
78 
79    /**
80     * Get the millisecond duration of this field from its value.
81     * 
82     * @param value  the value of the field, which may be negative
83     * @param instant  ignored
84     * @return the milliseconds that the field represents, which may be
85     * negative
86     */
87    public long getMillis(int value, long instant) {
88        return value * iUnitMillis;  // safe
89    }
90 
91    /**
92     * Get the millisecond duration of this field from its value.
93     * 
94     * @param value  the value of the field, which may be negative
95     * @param instant  ignored
96     * @return the milliseconds that the field represents, which may be
97     * negative
98     */
99    public long getMillis(long value, long instant) {
100        return FieldUtils.safeMultiply(value, iUnitMillis);
101    }
102 
103    public long add(long instant, int value) {
104        long addition = value * iUnitMillis;  // safe
105        return FieldUtils.safeAdd(instant, addition);
106    }
107 
108    public long add(long instant, long value) {
109        long addition = FieldUtils.safeMultiply(value, iUnitMillis);
110        return FieldUtils.safeAdd(instant, addition);
111    }
112 
113    public long getDifferenceAsLong(long minuendInstant, long subtrahendInstant) {
114        long difference = FieldUtils.safeSubtract(minuendInstant, subtrahendInstant);
115        return difference / iUnitMillis;
116    }
117 
118    //-----------------------------------------------------------------------
119    /**
120     * Compares this duration field to another.
121     * Two fields are equal if of the same type and duration.
122     * 
123     * @param obj  the object to compare to
124     * @return if equal
125     */
126    public boolean equals(Object obj) {
127        if (this == obj) {
128            return true;
129        } else if (obj instanceof PreciseDurationField) {
130            PreciseDurationField other = (PreciseDurationField) obj;
131            return (getType() == other.getType()) && (iUnitMillis == other.iUnitMillis);
132        }
133        return false;
134    }
135 
136    /**
137     * Gets a hash code for this instance.
138     * 
139     * @return a suitable hashcode
140     */
141    public int hashCode() {
142        long millis = iUnitMillis;
143        int hash = (int) (millis ^ (millis >>> 32));
144        hash += getType().hashCode();
145        return hash;
146    }
147 
148}

[all classes][org.joda.time.field]
EMMA 2.0.5312 (C) Vladimir Roubtsov