Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 11 additions & 21 deletions include/tsutil/DenseThreadId.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,19 @@

#include "tsutil/Assert.h"

#include <array>
#include <cstddef>
#include <mutex>
#include <vector>

// Provide an alternate thread id, suitible for use as an array index.
// Provide an alternate thread id, suitable for use as an array index.
//
class DenseThreadId
{
public:
// This can onlhy be called during single-threaded initialization.
//
static void
set_num_possible_values(std::size_t num_possible_values)
static constexpr std::size_t
num_possible_values()
{
_num_possible_values = num_possible_values;
return _num_possible_values;
}

static std::size_t
Expand All @@ -50,23 +48,15 @@ class DenseThreadId
return _id.val;
}

static std::size_t
num_possible_values()
{
return _num_possible_values;
}

private:
inline static std::mutex _mtx;
inline static std::vector<std::size_t> _id_stack;
inline static std::size_t _stack_top_idx;
inline static std::size_t _num_possible_values{256};
static constexpr std::size_t _num_possible_values{256};
inline static std::mutex _mtx;
inline static std::array<std::size_t, _num_possible_values> _id_stack;
inline static std::size_t _stack_top_idx;

static void
_init()
{
_id_stack.resize(_num_possible_values);

_stack_top_idx = 0;
for (std::size_t i{0}; i < _num_possible_values; ++i) {
_id_stack[i] = i + 1;
Expand All @@ -82,8 +72,8 @@ class DenseThreadId
_init();
_inited = true;
}
if (_id_stack.size() == _stack_top_idx) {
fatal_error("DenseThreadId: number of threads exceeded maximum {}", unsigned(_id_stack.size()));
if (_num_possible_values == _stack_top_idx) {
fatal_error("DenseThreadId: number of threads exceeded maximum {}", unsigned(_num_possible_values));
}
val = _stack_top_idx;
_stack_top_idx = _id_stack[_stack_top_idx];
Expand Down