| 189 | virtual ~RandomGeneratorStorage() { pthread_key_delete(key_); } |
| 190 | |
| 191 | std::mt19937 *Get() { |
| 192 | auto *result = static_cast<std::mt19937 *>(pthread_getspecific(key_)); |
| 193 | if (result == nullptr) { |
| 194 | result = new std::mt19937(GetRandomGeneratorSeed()); |
| 195 | pthread_setspecific(key_, result); |
| 196 | } |
| 197 | return result; |
| 198 | } |
| 199 | |
| 200 | private: |
| 201 | static void Delete(void *value) { delete static_cast<std::mt19937 *>(value); } |
no test coverage detected