mil.navy.nps.util
Class UnsignedLong

java.lang.Object
  extended byjava.lang.Number
      extended bymil.navy.nps.util.UnsignedLong
All Implemented Interfaces:
java.lang.Cloneable, java.io.Serializable, SerializationInterface

public class UnsignedLong
extends java.lang.Number
implements SerializationInterface, java.lang.Cloneable

Version:
1.0
Author:
Don McGregor (http://www.web3d.org/WorkingGroups/vrtp/dis-java-vrml/)
Location:
http://www.web3d.org/WorkingGroups/vrtp/dis-java-vrml/mil/navy/nps/dis/UnsignedLong.java
Summary:
This class implements a 64-bit unsigned long, which Java doesn't natively handle.
Explanation:
This is an extension of Number to handle 64-bit unsigned integers. Java doesn't handle unsigned numbers, so we have to promote the unsigned integers to longs to be sure we have enough space to handle them.

This implements the SerializationInterface, which means it can be written out to a stream in the standard DIS 64-bit format.

See comments in UnsignedByte for description of how the mapping between negative values and unsigned positive values works.

This implements the Cloneable interface, which means that when we clone() something we can do a bitwise field copy (shallow copy). This needs to change if we ever have any actual objects contained in this class.

History:
10Aug2000 initial internal representation double /Dave Laflam and Don Brutzman /New from UnsignedInt.java
25Aug2000 internal representation long /Don McGregor and Don Brutzman /New from UnsignedInt.java
Test invocation:
java mil.navy.nps.util.UnsignedLong
References:
DIS-Java-VRML Working Group: http://web.nps.navy.mil/~brutzman/vrtp/dis-java-vrml/
See Also:
SerializationInterface, UnsignedByte, UnsignedShort, UnsignedInt, Serialized Form

Field Summary
static long MAX_UNSIGNEDLONG_VALUE
          Maximum value is (2^64 - 1) = 18446744073709551615, but currently support is limited to 63-bit maximum size of Long = java.lang.Long.MAX_VALUE
 
Constructor Summary
UnsignedLong()
          Contructs an UnsignedLong object and initializes its value to 0.
UnsignedLong(byte pData)
          Constructs a UnsignedLong object from a signed byte, throws an exception if the parameter is out of range.
UnsignedLong(double pData)
          Constructs an UnsignedLong object from a signed double, throws an exception if the parameter is out of range.
UnsignedLong(float pData)
          Constructs an UnsignedLong object from a signed float, throws an exception if the parameter is out of range.
UnsignedLong(int pData)
          Constructs an UnsignedLong object from a signed int, throws an exception if the parameter is out of range.
UnsignedLong(long pData)
          Constructs an UnsignedLong object from a signed long, throws an exception if the parameter is out of range.
UnsignedLong(short pData)
          Constructs a UnsignedLong object from a signed short, throws an exception if the paraneter is out of range.
 
Method Summary
 java.lang.Object clone()
          Makes a deep copy of the current UnsignedLong object.
static void debugTest()
          Of debugging interest only.
 void deSerialize(java.io.DataInputStream pInputStream)
          Reads an UnsignedLong input from DIS format.
 double doubleValue()
          Returns the current value of this object as a double float, after conversion.
 float floatValue()
          Returns a the current value of this object as a float, after conversion.
 int intValue()
          Don't use this ! Explanation This is actually a bad thing, since we cannot represent the full range of an unsigned long with an long.
 long longValue()
          Returns the current value of this object as a long, after conversion.
static void main(java.lang.String[] args)
           
 void serialize(java.io.DataOutputStream pOutputStream)
          Writes out an UnsignedLong to an output stream.
 java.lang.String toString()
          Returns a String object representing this UnsignedLong value.
 
Methods inherited from class java.lang.Number
byteValue, shortValue
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

MAX_UNSIGNEDLONG_VALUE

public static final long MAX_UNSIGNEDLONG_VALUE
Maximum value is (2^64 - 1) = 18446744073709551615, but currently support is limited to 63-bit maximum size of Long = java.lang.Long.MAX_VALUE

See Also:
Constant Field Values
Constructor Detail

UnsignedLong

public UnsignedLong()
Contructs an UnsignedLong object and initializes its value to 0.


UnsignedLong

public UnsignedLong(byte pData)
Constructs a UnsignedLong object from a signed byte, throws an exception if the parameter is out of range.

Parameters:
pData - >=0,<=MAX_UNSIGNEDLONG_VALUE
Throws:
java.lang.RuntimeException - if pData is out of range

UnsignedLong

public UnsignedLong(short pData)
Constructs a UnsignedLong object from a signed short, throws an exception if the paraneter is out of range.

Parameters:
pData - >=0
Throws:
java.lang.RuntimeException - if pData is out of range

UnsignedLong

public UnsignedLong(int pData)
Constructs an UnsignedLong object from a signed int, throws an exception if the parameter is out of range.

Parameters:
pData - >=0
Throws:
java.lang.RuntimeException - if pData is out of range

UnsignedLong

public UnsignedLong(double pData)
Constructs an UnsignedLong object from a signed double, throws an exception if the parameter is out of range.

Parameters:
pData - >=0
Throws:
java.lang.RuntimeException - if pData is out of range

UnsignedLong

public UnsignedLong(float pData)
Constructs an UnsignedLong object from a signed float, throws an exception if the parameter is out of range.

Parameters:
pData - >=0
Throws:
java.lang.RuntimeException - if pData is out of range

UnsignedLong

public UnsignedLong(long pData)
Constructs an UnsignedLong object from a signed long, throws an exception if the parameter is out of range.

Parameters:
pData - >=0
Throws:
java.lang.RuntimeException - if pData is out of range
Method Detail

floatValue

public float floatValue()
Returns a the current value of this object as a float, after conversion.

Returns:
the current value of this object as a float

doubleValue

public double doubleValue()
Returns the current value of this object as a double float, after conversion.

Returns:
the current value of this object as a double float

longValue

public long longValue()
Returns the current value of this object as a long, after conversion.

Returns:
the current value of this object as a long

intValue

public int intValue()
Don't use this !
Explanation
This is actually a bad thing, since we cannot represent the full range of an unsigned long with an long. One option is to throw an exception only when the long value is beyond the range, eg above 2-billion odd. But it seems better to blow up in place, rather than work sometimes and not other times. (We have to implement the method because it's declared abstract in Number.) Moral of the story: don't try to read the value of an unsigned long with an int.

Throws:
java.lang.RuntimeException - whenever one tries to use this method.

serialize

public void serialize(java.io.DataOutputStream pOutputStream)
Writes out an UnsignedLong to an output stream.

Specified by:
serialize in interface SerializationInterface
Throws:
java.lang.RuntimeException - if an IOException occurs.
See Also:
SerializationInterface

deSerialize

public void deSerialize(java.io.DataInputStream pInputStream)
Reads an UnsignedLong input from DIS format.

Specified by:
deSerialize in interface SerializationInterface
Throws:
java.lang.RuntimeException - if an IOException occurs.
See Also:
SerializationInterface

toString

public java.lang.String toString()
Returns a String object representing this UnsignedLong value.

Returns:
a string representation of the value of this object in base 10.

clone

public java.lang.Object clone()
Makes a deep copy of the current UnsignedLong object.

Returns:
the cloned object.
Throws:
java.lang.RuntimeException - if cloning fails

debugTest

public static void debugTest()
Of debugging interest only. You shouldn't have to use this method.


main

public static void main(java.lang.String[] args)