* {@link Supplier#get()} method MUST be a v4 UUID (random).
*
* @see UUID
- * @see https://datatracker.ietf.org/doc/html/rfc4122
+ * @see "https://datatracker.ietf.org/doc/html/rfc4122"
*/
public interface UuidFactory extends Supplier<UUID> {
+
/*
* DEFAULT
*/
*/
final static UUID NAMESPACE_UUID_X500 = UUID.fromString("6ba7b814-9dad-11d1-80b4-00c04fd430c8");
+ /*
+ * BIT LEVEL CONSTANTS
+ */
+ /** Base for the most significant bit of version 1 (time based) UUIDs. */
+ long MOST_SIG_VERSION1 = (1l << 12);
+ /** Base for the least significant part of RFC4122 (variant 2) UUIDs. */
+ long LEAST_SIG_RFC4122_VARIANT = (1l << 63);
+
/*
* UTILITIES
*/
* Whether this UUID is time based but was not generated from an IEEE 802
* address, as per Section 4.5 of RFC4122.
*
- * @see https://datatracker.ietf.org/doc/html/rfc4122#section-4.5
+ * @see "https://datatracker.ietf.org/doc/html/rfc4122#section-4.5"
*/
static boolean isTimeBasedWithMacAddress(UUID uuid) {
if (uuid.version() == 1) {
static boolean isNameBased(UUID uuid) {
return uuid.version() == 3 || uuid.version() == 5;
}
+
+ /**
+ * The state of a time based UUID generator, as described and discussed in
+ * section 4.2.1 of RFC4122.
+ *
+ * @see "https://datatracker.ietf.org/doc/html/rfc4122#section-4.2.1"
+ */
+ interface TimeUuidState {
+ /** Current node id and clock sequence for this thread. */
+ long getLeastSignificantBits();
+
+ /** A new current timestamp for this thread. */
+ long getMostSignificantBits();
+
+ /**
+ * The last timestamp which was produced by this thread, as returned by
+ * {@link UUID#timestamp()}.
+ */
+ long getLastTimestamp();
+
+ /**
+ * The current clock sequence for this thread, as returned by
+ * {@link UUID#clockSequence()}.
+ */
+ long getClockSequence();
+ }
}