@@ -76,7 +76,7 @@ std::mt19937_64* GetSharedRng() {
7676}
7777
7878
79- enum Enum {
79+ enum Enum : uint64_t {
8080 kEnumEmpty ,
8181 kEnumDeleted ,
8282};
@@ -96,34 +96,24 @@ struct Generator;
9696template <class T >
9797struct Generator <T, typename std::enable_if<std::is_integral<T>::value>::type> {
9898 T operator ()() const {
99- std::uniform_int_distribution<T> dist;
100- return dist (*GetSharedRng ());
99+ std::uniform_int_distribution<T> dist;
100+ return dist (*GetSharedRng ());
101101 }
102102};
103103
104104template <>
105105struct Generator <Enum> {
106106 Enum operator ()() const {
107- std::uniform_int_distribution<typename std::underlying_type<Enum>::type> dist;
108-
109- while (true ) {
110- auto variate = dist (*GetSharedRng ());
111- if (variate != kEnumEmpty && variate != kEnumDeleted )
112- return static_cast <Enum>(variate);
113- }
107+ std::uniform_int_distribution<typename std::underlying_type<Enum>::type> dist;
108+ return static_cast <Enum>(dist (*GetSharedRng ()));
114109 }
115110};
116111
117112template <>
118113struct Generator <EnumClass> {
119114 EnumClass operator ()() const {
120- std::uniform_int_distribution<
121- typename std::underlying_type<EnumClass>::type> dist;
122- while (true ) {
123- EnumClass variate = static_cast <EnumClass>(dist (*GetSharedRng ()));
124- if (variate != EnumClass::kEmpty && variate != EnumClass::kDeleted )
125- return static_cast <EnumClass>(variate);
126- }
115+ std::uniform_int_distribution<typename std::underlying_type<EnumClass>::type> dist;
116+ return static_cast <EnumClass>(dist (*GetSharedRng ()));
127117 }
128118};
129119
0 commit comments