12#ifndef SST_CORE_STATAPI_STATFIELDINFO_H
13#define SST_CORE_STATAPI_STATFIELDINFO_H
15#include "sst/core/sst_types.h"
20namespace SST::Statistics {
22using fieldType_t = uint32_t;
33 virtual const char* fieldName()
const = 0;
34 virtual const char* shortName()
const = 0;
41 static fieldType_t getField(
const char* field_short_name);
43 static void checkRegisterConflict(
const char* old_name,
const char* new_name);
45 static fieldType_t allocateFieldEnum();
51 static std::map<fieldType_t, StatisticFieldTypeBase*>* fields_;
52 static fieldType_t enum_counter_;
60 StatisticFieldType(
const char* name,
const char* short_name)
62 checkRegisterConflict(field_name_, name);
63 checkRegisterConflict(short_name_, short_name);
65 short_name_ = short_name;
66 if ( field_enum_ == 0 ) {
67 field_enum_ = allocateFieldEnum();
71 short_name_ = short_name;
72 addField(field_enum_,
this);
75 static const char* getFieldName() {
return field_name_; }
77 static const char* getShortName() {
return short_name_; }
79 static fieldType_t id() {
return field_enum_; }
81 const char* fieldName()
const override {
return getFieldName(); }
83 const char* shortName()
const override {
return getShortName(); }
86 static Statistics::fieldType_t field_enum_;
87 static const char* field_name_;
88 static const char* short_name_;
91fieldType_t StatisticFieldType<T>::field_enum_ = 0;
93const char* StatisticFieldType<T>::field_name_ =
nullptr;
95const char* StatisticFieldType<T>::short_name_ =
nullptr;
100 using fieldType_t = ::SST::Statistics::fieldType_t;
101 using fieldHandle_t = int32_t;
109 StatisticFieldInfo(
const char* stat_name,
const char* field_name, fieldType_t field_type);
113 inline const std::string&
getStatName()
const {
return stat_name_; }
137 static const char* getFieldTypeShortName(fieldType_t type)
139 return StatisticFieldTypeBase::getField(type)->shortName();
142 static const char* getFieldTypeFullName(fieldType_t type)
144 return StatisticFieldTypeBase::getField(type)->fieldName();
147 template <
typename T>
148 static fieldType_t getFieldTypeFromTemplate()
150 return StatisticFieldType<T>::id();
157 std::string stat_name_;
158 std::string field_name_;
159 fieldType_t field_type_;
160 fieldHandle_t field_handle_;
The class for representing Statistic Output Fields.
Definition statfieldinfo.h:98
fieldHandle_t getFieldHandle()
Get the field handle.
Definition statfieldinfo.h:135
const std::string & getStatName() const
Return the statistic name related to this field info.
Definition statfieldinfo.h:113
const std::string & getFieldName() const
Return the field name related to this field info.
Definition statfieldinfo.h:115
bool operator==(StatisticFieldInfo &field_info_1)
Compare two field info structures.
Definition statfieldinfo.cc:36
fieldType_t getFieldType() const
Return the field type related to this field info.
Definition statfieldinfo.h:117
std::string getFieldUniqueName() const
Return the field type related to this field info.
Definition statfieldinfo.cc:42
void setFieldHandle(fieldHandle_t handle)
Set the field handle.
Definition statfieldinfo.h:130
StatisticFieldInfo(const char *stat_name, const char *field_name, fieldType_t field_type)
Construct a StatisticFieldInfo.
Definition statfieldinfo.cc:27
Definition statfieldinfo.h:31