home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / util / UUID.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  3.9 KB  |  209 lines

  1. package java.util;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.io.Serializable;
  6. import java.security.MessageDigest;
  7. import java.security.NoSuchAlgorithmException;
  8. import java.security.SecureRandom;
  9.  
  10. public final class UUID implements Serializable, Comparable<UUID> {
  11.    private static final long serialVersionUID = -4856846361193249489L;
  12.    private final long mostSigBits;
  13.    private final long leastSigBits;
  14.    private transient int version = -1;
  15.    private transient int variant = -1;
  16.    private transient volatile long timestamp = -1L;
  17.    private transient int sequence = -1;
  18.    private transient long node = -1L;
  19.    private transient int hashCode = -1;
  20.    private static volatile SecureRandom numberGenerator = null;
  21.  
  22.    private UUID(byte[] var1) {
  23.       long var2 = 0L;
  24.       long var4 = 0L;
  25.  
  26.       assert var1.length == 16;
  27.  
  28.       for(int var6 = 0; var6 < 8; ++var6) {
  29.          var2 = var2 << 8 | (long)(var1[var6] & 255);
  30.       }
  31.  
  32.       for(int var7 = 8; var7 < 16; ++var7) {
  33.          var4 = var4 << 8 | (long)(var1[var7] & 255);
  34.       }
  35.  
  36.       this.mostSigBits = var2;
  37.       this.leastSigBits = var4;
  38.    }
  39.  
  40.    public UUID(long var1, long var3) {
  41.       this.mostSigBits = var1;
  42.       this.leastSigBits = var3;
  43.    }
  44.  
  45.    public static UUID randomUUID() {
  46.       SecureRandom var0 = numberGenerator;
  47.       if (var0 == null) {
  48.          numberGenerator = var0 = new SecureRandom();
  49.       }
  50.  
  51.       byte[] var1 = new byte[16];
  52.       var0.nextBytes(var1);
  53.       var1[6] = (byte)(var1[6] & 15);
  54.       var1[6] = (byte)(var1[6] | 64);
  55.       var1[8] = (byte)(var1[8] & 63);
  56.       var1[8] = (byte)(var1[8] | 128);
  57.       return new UUID(var1);
  58.    }
  59.  
  60.    public static UUID nameUUIDFromBytes(byte[] var0) {
  61.       MessageDigest var1;
  62.       try {
  63.          var1 = MessageDigest.getInstance("MD5");
  64.       } catch (NoSuchAlgorithmException var3) {
  65.          throw new InternalError("MD5 not supported");
  66.       }
  67.  
  68.       byte[] var2 = var1.digest(var0);
  69.       var2[6] = (byte)(var2[6] & 15);
  70.       var2[6] = (byte)(var2[6] | 48);
  71.       var2[8] = (byte)(var2[8] & 63);
  72.       var2[8] = (byte)(var2[8] | 128);
  73.       return new UUID(var2);
  74.    }
  75.  
  76.    public static UUID fromString(String var0) {
  77.       String[] var1 = var0.split("-");
  78.       if (var1.length != 5) {
  79.          throw new IllegalArgumentException("Invalid UUID string: " + var0);
  80.       } else {
  81.          for(int var2 = 0; var2 < 5; ++var2) {
  82.             var1[var2] = "0x" + var1[var2];
  83.          }
  84.  
  85.          long var6 = Long.decode(var1[0]);
  86.          var6 <<= 16;
  87.          var6 |= Long.decode(var1[1]);
  88.          var6 <<= 16;
  89.          var6 |= Long.decode(var1[2]);
  90.          long var4 = Long.decode(var1[3]);
  91.          var4 <<= 48;
  92.          var4 |= Long.decode(var1[4]);
  93.          return new UUID(var6, var4);
  94.       }
  95.    }
  96.  
  97.    public long getLeastSignificantBits() {
  98.       return this.leastSigBits;
  99.    }
  100.  
  101.    public long getMostSignificantBits() {
  102.       return this.mostSigBits;
  103.    }
  104.  
  105.    public int version() {
  106.       if (this.version < 0) {
  107.          this.version = (int)(this.mostSigBits >> 12 & 15L);
  108.       }
  109.  
  110.       return this.version;
  111.    }
  112.  
  113.    public int variant() {
  114.       if (this.variant < 0) {
  115.          if (this.leastSigBits >>> 63 == 0L) {
  116.             this.variant = 0;
  117.          } else if (this.leastSigBits >>> 62 == 2L) {
  118.             this.variant = 2;
  119.          } else {
  120.             this.variant = (int)(this.leastSigBits >>> 61);
  121.          }
  122.       }
  123.  
  124.       return this.variant;
  125.    }
  126.  
  127.    public long timestamp() {
  128.       if (this.version() != 1) {
  129.          throw new UnsupportedOperationException("Not a time-based UUID");
  130.       } else {
  131.          long var1 = this.timestamp;
  132.          if (var1 < 0L) {
  133.             long var3 = (this.mostSigBits & 4095L) << 48;
  134.             long var4 = var3 | (this.mostSigBits >> 16 & 65535L) << 32;
  135.             var1 = var4 | this.mostSigBits >>> 32;
  136.             this.timestamp = var1;
  137.          }
  138.  
  139.          return var1;
  140.       }
  141.    }
  142.  
  143.    public int clockSequence() {
  144.       if (this.version() != 1) {
  145.          throw new UnsupportedOperationException("Not a time-based UUID");
  146.       } else {
  147.          if (this.sequence < 0) {
  148.             this.sequence = (int)((this.leastSigBits & 4611404543450677248L) >>> 48);
  149.          }
  150.  
  151.          return this.sequence;
  152.       }
  153.    }
  154.  
  155.    public long node() {
  156.       if (this.version() != 1) {
  157.          throw new UnsupportedOperationException("Not a time-based UUID");
  158.       } else {
  159.          if (this.node < 0L) {
  160.             this.node = this.leastSigBits & 281474976710655L;
  161.          }
  162.  
  163.          return this.node;
  164.       }
  165.    }
  166.  
  167.    public String toString() {
  168.       return digits(this.mostSigBits >> 32, 8) + "-" + digits(this.mostSigBits >> 16, 4) + "-" + digits(this.mostSigBits, 4) + "-" + digits(this.leastSigBits >> 48, 4) + "-" + digits(this.leastSigBits, 12);
  169.    }
  170.  
  171.    private static String digits(long var0, int var2) {
  172.       long var3 = 1L << var2 * 4;
  173.       return Long.toHexString(var3 | var0 & var3 - 1L).substring(1);
  174.    }
  175.  
  176.    public int hashCode() {
  177.       if (this.hashCode == -1) {
  178.          this.hashCode = (int)(this.mostSigBits >> 32 ^ this.mostSigBits ^ this.leastSigBits >> 32 ^ this.leastSigBits);
  179.       }
  180.  
  181.       return this.hashCode;
  182.    }
  183.  
  184.    public boolean equals(Object var1) {
  185.       if (!(var1 instanceof UUID)) {
  186.          return false;
  187.       } else if (((UUID)var1).variant() != this.variant()) {
  188.          return false;
  189.       } else {
  190.          UUID var2 = (UUID)var1;
  191.          return this.mostSigBits == var2.mostSigBits && this.leastSigBits == var2.leastSigBits;
  192.       }
  193.    }
  194.  
  195.    public int compareTo(UUID var1) {
  196.       return this.mostSigBits < var1.mostSigBits ? -1 : (this.mostSigBits > var1.mostSigBits ? 1 : (this.leastSigBits < var1.leastSigBits ? -1 : (this.leastSigBits > var1.leastSigBits ? 1 : 0)));
  197.    }
  198.  
  199.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  200.       var1.defaultReadObject();
  201.       this.version = -1;
  202.       this.variant = -1;
  203.       this.timestamp = -1L;
  204.       this.sequence = -1;
  205.       this.node = -1L;
  206.       this.hashCode = -1;
  207.    }
  208. }
  209.