#include <boost/lexical_cast.hpp>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
boost::uuids::uuid GuidGenerate() noexcept; /* GUID生成 */
boost::uuids::uuid LexicalCast(const void* guid, int length) noexcept; /* 从GUID二进制中转换 */
boost::uuids::uuid StringToGuid(const std::string& guid) noexcept; /* 字符串转换为GUID */
std::string GuidToString(const boost::uuids::uuid& uuid) noexcept; / * GUID转换为字符串 */
std::string LexicalCast(const boost::uuids::uuid& uuid) noexcept; / * GUID转换为字符串 Lexical 方法 */
boost::uuids::uuid GuidGenerate() noexcept {
boost::uuids::random_generator rgen;
return rgen();
}
std::string LexicalCast(const boost::uuids::uuid& uuid) noexcept {
return boost::lexical_cast<std::string>(uuid);;
}
std::string GuidToString(const boost::uuids::uuid& uuid) noexcept {
return boost::uuids::to_string(uuid);
}
boost::uuids::uuid LexicalCast(const void* guid, int length) noexcept {
boost::uuids::uuid uuid;
if (NULL == guid) {
length = 0;
}
const int max_length = sizeof(uuid.data);
if (length >= max_length) {
memcpy(uuid.data, guid, length);
}
elif(length > 0) {
memcpy(uuid.data, guid, length);
memset(uuid.data + length, 0, max_length - length);
}
else {
memset(uuid.data, 0, sizeof(uuid.data));
}
return uuid;
}
boost::uuids::uuid StringToGuid(const std::string& guid) noexcept {
boost::uuids::string_generator sgen;
try {
return sgen(guid);
}
catch (std::exception&) {
return LexicalCast(NULL, 0);
}
}