Я читал о повышении UUID. Я понимаю, что существуют различные способы генерации UUID, это определяется полем версии UUID. Этот документ показывает 5 разных версий UUID. API Boost UUID позволяет запрашивать UUID его версии. Но как установить версию? Повысить страницу документации показывает только один способ создания UUID, а именно:
boost::uuids::uuid u = boost::uuids::random_generator()();
Итак, не могли бы вы показать мне, как генерировать UUID на основе других 4 версий? Особенно версия 1, то есть генератор на основе времени, кажется мне очень интересным.
Также, скажите, пожалуйста, чем отличается версия UUID от ее варианта? Они оба звучат как одно и то же.
Я никогда раньше не использовал библиотеку Uuid из Boost, но я немного просмотрел код, и кажется, что version
а также variant
из uuid
основан на generator
ты используешь.
Есть несколько видов генераторов, например, random_generator
а также name_generator
. Каждый генератор будет иметь свои собственные значения version
а также variant
это впрыснет в результирующий uuid
,
Это прямо из исходного кода, обратите внимание, как варианты и версии отличаются для двух генераторов.
// set variant
// must be 0b10xxxxxx
*(u.begin()+8) &= 0xBF;
*(u.begin()+8) |= 0x80;
// set version
// must be 0b0100xxxx
*(u.begin()+6) &= 0x4F; //0b01001111
*(u.begin()+6) |= 0x40; //0b01000000
// set variant
// must be 0b10xxxxxx
*(u.begin()+8) &= 0xBF;
*(u.begin()+8) |= 0x80;
// set version
// must be 0b0101xxxx
*(u.begin()+6) &= 0x5F; //0b01011111
*(u.begin()+6) |= 0x50; //0b01010000
Других решений пока нет …