Coverage Report - org.jscsi.target.util.SerialArithmeticNumber
 
Classes in this File Line Coverage Branch Coverage Complexity
SerialArithmeticNumber
0%
0/13
0%
0/6
1.571
 
 1  
 package org.jscsi.target.util;
 2  
 
 3  
 /**
 4  
  * A class for serial number arithmetics, as defined in <code>[RFC 1982]</code>, with <code>SERIAL_BITS = 32</code>.
 5  
  * <p>
 6  
  * Unlike the original algorithm, this implementation is based on unsigned subtraction, resolving the issue of undefined
 7  
  * comparisons, however introducing one additional oddity - each member of a pair of serial numbers with a wrapped
 8  
  * distance of <code>2^(SERIAL_BITS - 1)</code> will be considered less than (and greater than) the other one.
 9  
  * 
 10  
  * @author Andreas Ergenzinger
 11  
  */
 12  
 public final class SerialArithmeticNumber {
 13  
 
 14  
     /**
 15  
      * The signed integer representation of the serial arithmetic number.
 16  
      */
 17  
     private int value;
 18  
 
 19  
     /**
 20  
      * Creates a new {@link SerialArithmeticNumber} with a starting {@link #value} of zero.
 21  
      */
 22  
     public SerialArithmeticNumber () {
 23  0
         this(0);
 24  0
     }
 25  
 
 26  
     /**
 27  
      * Creates a new {@link SerialArithmeticNumber} with the specified starting {@link #value}.
 28  
      * 
 29  
      * @param value the initial {@link #value}
 30  
      */
 31  0
     public SerialArithmeticNumber (final int value) {
 32  0
         this.value = value;
 33  0
     }
 34  
 
 35  
     /**
 36  
      * Increments the {@link SerialArithmeticNumber}'s {@link #value} by one.
 37  
      */
 38  
     public void increment () {
 39  0
         ++value;
 40  0
     }
 41  
 
 42  
     /**
 43  
      * Returns <code>true</code> if the parameter matches the {@link #value} and <code>false</code> if it does not.
 44  
      * 
 45  
      * @param serialArithmeticNumber the serial arithmetic number to match
 46  
      * @return <code>true</code> if the parameter matches the {@link #value} and <code>false</code> if it does not
 47  
      */
 48  
     public boolean equals (final int serialArithmeticNumber) {
 49  0
         return value == serialArithmeticNumber;
 50  
     }
 51  
 
 52  
     /**
 53  
      * Returns <code>true</code> if the parameter is less than the {@link #value} in serial number arithmetics and
 54  
      * <code>false</code> if it is not.
 55  
      * 
 56  
      * @param serialArithmeticNumber the serial arithmetic number to match
 57  
      * @return <code>true</code> if the parameter is less than the {@link #value} in serial number arithmetics and
 58  
      *         <code>false</code> if it is not
 59  
      */
 60  
     public boolean lessThan (final int serialArithmeticNumber) {
 61  0
         if (value - serialArithmeticNumber < 0) return true;
 62  0
         return false;
 63  
     }
 64  
 
 65  
     /**
 66  
      * Returns <code>true</code> if the parameter is greater than the {@link #value} in serial number arithmetics and
 67  
      * <code>false</code> if it is not.
 68  
      * 
 69  
      * @param serialArithmeticNumber the serial arithmetic number to match
 70  
      * @return <code>true</code> if the parameter is greater than the {@link #value} in serial number arithmetics and
 71  
      *         <code>false</code> if it is not
 72  
      */
 73  
     public boolean greaterThan (final int serialArithmeticNumber) {
 74  0
         if (serialArithmeticNumber - value < 0) return true;
 75  0
         return false;
 76  
     }
 77  
 
 78  
     /**
 79  
      * Returns the {@link SerialArithmeticNumber}'s {@link #value}.
 80  
      * 
 81  
      * @return the {@link #value}
 82  
      */
 83  
     public int getValue () {
 84  0
         return value;
 85  
     }
 86  
 }