48 lines
1.0 KiB
C++
48 lines
1.0 KiB
C++
#pragma once
|
|
|
|
/*
|
|
* Copyright 2015 Cloudius Systems.
|
|
*/
|
|
|
|
// This class is the parts of java.util.UUID that we need
|
|
|
|
#include <stdint.h>
|
|
#include <cassert>
|
|
|
|
namespace utils {
|
|
|
|
class UUID {
|
|
private:
|
|
int64_t most_sig_bits;
|
|
int64_t least_sig_bits;
|
|
public:
|
|
UUID(int64_t most_sig_bits, int64_t least_sig_bits)
|
|
: most_sig_bits(most_sig_bits), least_sig_bits(least_sig_bits) {}
|
|
|
|
int64_t get_most_significant_bits() const {
|
|
return most_sig_bits;
|
|
}
|
|
int64_t get_least_significant_bits() const {
|
|
return least_sig_bits;
|
|
}
|
|
int version() const {
|
|
return (most_sig_bits >> 12) & 0xf;
|
|
}
|
|
|
|
int64_t timestamp() const {
|
|
//if (version() != 1) {
|
|
// throw new UnsupportedOperationException("Not a time-based UUID");
|
|
//}
|
|
assert(version() == 1);
|
|
|
|
return ((most_sig_bits & 0xFFF) << 48) |
|
|
(((most_sig_bits >> 16) & 0xFFFF) << 32) |
|
|
(((uint64_t)most_sig_bits) >> 32);
|
|
|
|
}
|
|
};
|
|
|
|
UUID make_random_uuid();
|
|
|
|
}
|