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