#ifndef DDS_SYSTEM_UTIL_UTILITIES_H
#define DDS_SYSTEM_UTIL_UTILITIES_H
#include <cstdint>
#include <memory>
#include <string>
#include <vector>
namespace dds {
class Utilities {
public:
Utilities() = default;
Utilities(const Utilities&) = default;
Utilities& operator=(const Utilities&) = default;
Utilities(Utilities&&) noexcept = default;
Utilities& operator=(Utilities&&) noexcept = default;
static constexpr bool log_enabled() {
#ifdef DDS_UTILITIES_LOG
return true;
#else
return false;
#endif
}
static constexpr bool stats_enabled() {
#ifdef DDS_UTILITIES_STATS
return true;
#else
return false;
#endif
}
void log_append(const std::string& s) { log_.push_back(s); }
const std::vector<std::string>& log_buffer() const { return log_; }
size_t log_size() const { return log_.size(); }
bool log_contains(const std::string& prefix) const {
for (const auto& line : log_) {
if (line.rfind(prefix, 0) == 0) return true; }
return false;
}
void log_clear() { log_.clear(); }
struct Stats {
unsigned tt_creates = 0;
unsigned tt_disposes = 0;
};
const Stats& stats() const { return stats_; }
Stats& stats() { return stats_; }
Stats stats_snapshot() const { return stats_; }
void stats_reset() { stats_ = Stats{}; }
private:
std::vector<std::string> log_{}; Stats stats_{}; };
}
#endif