Add auto-detection of platform integer size in prometheus

This commit is contained in:
Joseph Henry 2025-02-26 09:55:08 -08:00
parent a2162c01e3
commit 6b113c8270
No known key found for this signature in database
GPG key ID: 3C2C8A1EB4269827
3 changed files with 35 additions and 3 deletions

View file

@ -25,7 +25,18 @@ namespace prometheus {
///
/// The class is thread-safe. No concurrent call to any API of this type causes
/// a data race.
template <typename Value_ = uint64_t>
#include <stdint.h>
#if UINTPTR_MAX == 0xffFFffFF
// 32-bit platform
template <typename Value_ = uint32_t>
#elif UINTPTR_MAX == 0xffFFffFFffFFffFF
// 64-bit platform
template <typename Value_ = uint64_t>
#else
#error Unknown platform - does not look either like 32-bit or 64-bit
#endif
class Counter : public Metric {
std::atomic<Value_> value{ 0 };

View file

@ -23,7 +23,17 @@ namespace prometheus {
///
/// The class is thread-safe. No concurrent call to any API of this type causes
/// a data race.
#include <stdint.h>
#if UINTPTR_MAX == 0xffFFffFF
// 32-bit
template <typename Value_ = uint32_t>
#elif UINTPTR_MAX == 0xffFFffFFffFFffFF
// 64-bit
template <typename Value_ = uint64_t>
#else
#error Unknown platform - does not look either like 32-bit or 64-bit
#endif
class Gauge : public Metric {
std::atomic<Value_> value { 0 };

View file

@ -15,6 +15,17 @@
#include <memory>
#include <functional>
#include <stdexcept>
#include <stdint.h>
#if UINTPTR_MAX == 0xffFFffFF
// 32-bit
typedef uint32_tmetric_size;
#elif UINTPTR_MAX == 0xffFFffFFffFFffFF
// 64-bit
typedef uint64_t metric_size;
#else
#error Unknown platform - does not look either like 32-bit or 64-bit
#endif
namespace prometheus {
namespace simpleapi {
@ -46,7 +57,7 @@ namespace prometheus {
public:
using Metric = Counter<uint64_t>;
using Metric = Counter<metric_size>;
using Family = Metric::Family;
private:
@ -82,7 +93,7 @@ namespace prometheus {
public:
using Metric = Gauge<int64_t>;
using Metric = Gauge<metric_size>;
using Family = Metric::Family;
private: