/**************************************************************************************
* Copyright (c) Jonas Bon�r, Alexandre Vasseur. All rights reserved. *
* http://aspectwerkz.codehaus.org *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the LGPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package org.codehaus.aspectwerkz.proxy;
/**
* NOTE:
* <p/>
* This code is based on code from the [Plasmid Replication Engine] project.
* <br/>
* Licensed under [Mozilla Public License 1.0 (MPL)].
* <p/>
* Original JavaDoc:
* <p/>
* Our distributed objects are generally named most efficiently (and cleanly)
* by their UUID's. This class provides some static helpers for using UUID's.
* If it was efficient to do in Java, I would make the uuid an normal class
* and use instances of it. However, in current JVM's, we would end up using an
* Object to represent a long, which is pretty expensive. Maybe someday. ###
* <p/>
* UUID format: currently using currentTimeMillis() for the low bits. This uses
* about 40 bits for the next 1000 years, leaving 24 bits for debugging
* and consistency data. I'm using 8 of those for a magic asci 'U' byte.
* <p/>
* Future: use one instance of Uuid per type of object for better performance
* and more detailed info (instance could be matched to its uuid's via a map or
* array). This all static version bites.###
*/
public final class Uuid {
public static final long UUID_NONE = 0;
public static final long UUID_WILD = -1;
public static final long UUID_MAGICMASK = 0xff << 56;
public static final long UUID_MAGIC = 'U' << 56;
protected static long lastTime;
/**
* Generate and return a new Universally Unique ID.
* Happens to be monotonically increasing.
*/
public synchronized static long newUuid() {
long time = System.currentTimeMillis();
if (time <= lastTime) {
time = lastTime + 1;
}
lastTime = time;
return UUID_MAGIC | time;
}
/**
* Returns true if uuid could have been generated by Uuid.
*/
public static boolean isValid(final long uuid) {
return (uuid & UUID_MAGICMASK) == UUID_MAGIC
&& (uuid & ~UUID_MAGICMASK) != 0;
}
}