26 lines
807 B
C++
26 lines
807 B
C++
#pragma once
|
|
|
|
#include <type_traits>
|
|
|
|
#include "ProvidesSeqCountIF.h"
|
|
|
|
template <typename T>
|
|
class SeqCountProvider : public ProvidesSeqCountIF {
|
|
static_assert(std::is_same<T, uint8_t>::value || std::is_same<T, uint16_t>::value ||
|
|
std::is_same<T, uint32_t>::value,
|
|
"Only uint8_t, uint16_t, and uint32_t are allowed.");
|
|
|
|
public:
|
|
[[nodiscard]] unsigned int bitWidth() const override { return sizeof(T) * 8; }
|
|
uint64_t get() override { return counter; }
|
|
// I'm also abusing the primitive C variable overflow wrap around here.
|
|
void increment() override { counter++; }
|
|
|
|
private:
|
|
T counter{};
|
|
};
|
|
|
|
using SeqCountProviderU8 = SeqCountProvider<uint8_t>;
|
|
using SeqCountProviderU16 = SeqCountProvider<uint16_t>;
|
|
using SeqCountProviderU32 = SeqCountProvider<uint32_t>;
|