From aa4197adb99c96126e173c02cd255c0bd5d5bce5 Mon Sep 17 00:00:00 2001 From: David Boehme Date: Fri, 9 Oct 2026 17:24:14 -0700 Subject: [PATCH] Add Variant::as_c_str() --- include/caliper/common/Variant.h | 1 + src/caliper/RegionFilter.cpp | 5 ++--- src/caliper/cali.cpp | 3 +-- src/common/Attribute.cpp | 2 +- src/common/Variant.cpp | 4 ++-- src/reader/CaliperMetadataDB.cpp | 10 +++++----- src/services/craypat/CrayPAT.cpp | 4 ++-- src/services/monitor/LoopMonitor.cpp | 2 +- src/services/nvtx/Nvtx.cpp | 4 ++-- src/services/rocprofiler/RocTX.cpp | 2 +- src/services/vtune/VTuneBindings.cpp | 2 +- 11 files changed, 19 insertions(+), 20 deletions(-) diff --git a/include/caliper/common/Variant.h b/include/caliper/common/Variant.h index 933e9573..68d03435 100644 --- a/include/caliper/common/Variant.h +++ b/include/caliper/common/Variant.h @@ -72,6 +72,7 @@ class Variant double to_double(bool* okptr = nullptr) const { return cali_variant_to_double(m_v, okptr); } cali_attr_type to_attr_type(bool* okptr = nullptr) const { return cali_variant_to_type(m_v, okptr); } + const char* as_c_str() const { return static_cast(m_v.value.unmanaged_const_ptr); } uint64_t as_uint() const { return m_v.value.v_uint; } std::string to_string() const; diff --git a/src/caliper/RegionFilter.cpp b/src/caliper/RegionFilter.cpp index 3c3b303d..8ae01cb0 100644 --- a/src/caliper/RegionFilter.cpp +++ b/src/caliper/RegionFilter.cpp @@ -122,9 +122,8 @@ std::pair, std::string> RegionFilter::pars bool RegionFilter::match(const Variant& val, const Filter& filter) { - // We assume val is a string. Variant strings aren't - // 0-terminated, hence the more complicated comparisons - const char* strp = static_cast(val.data()); + // We assume val is a string + const char* strp = val.as_c_str(); for (const auto& w : filter.startswith) if (val.size() >= w.size() && w.compare(0, w.size(), strp, w.size()) == 0) diff --git a/src/caliper/cali.cpp b/src/caliper/cali.cpp index 4aab6d9c..be8fd0e2 100644 --- a/src/caliper/cali.cpp +++ b/src/caliper/cali.cpp @@ -357,9 +357,8 @@ const char* cali_get_current_region_or(const char* alt) return alt; Entry e = c.get_path_node(); - if (!e.empty() && e.value().type() == CALI_TYPE_STRING) - return static_cast(e.value().data()); + return e.value().as_c_str(); return alt; } diff --git a/src/common/Attribute.cpp b/src/common/Attribute.cpp index 3f9fd1ab..4d317427 100644 --- a/src/common/Attribute.cpp +++ b/src/common/Attribute.cpp @@ -29,7 +29,7 @@ const char* Attribute::name_c_str() const { for (const Node* node = m_node; node; node = node->parent()) if (node->attribute() == NAME_ATTR_ID) - return static_cast(node->data().data()); + return node->data().as_c_str(); return nullptr; } diff --git a/src/common/Variant.cpp b/src/common/Variant.cpp index 470f04ea..417473f9 100644 --- a/src/common/Variant.cpp +++ b/src/common/Variant.cpp @@ -63,7 +63,7 @@ std::string Variant::to_string() const break; case CALI_TYPE_STRING: { - const char* str = static_cast(data()); + const char* str = as_c_str(); std::size_t len = size(); if (len && str[len - 1] == 0) @@ -164,7 +164,7 @@ std::ostream& Variant::write_cali(std::ostream& os) util::write_uint64(os, m_v.value.v_uint); break; case CALI_TYPE_STRING: - util::write_cali_esc_string(os, static_cast(m_v.value.unmanaged_const_ptr), size()); + util::write_cali_esc_string(os, as_c_str(), size()); break; case CALI_TYPE_TYPE: os << cali_type2string(m_v.value.v_type); diff --git a/src/reader/CaliperMetadataDB.cpp b/src/reader/CaliperMetadataDB.cpp index c0a13d75..9933045e 100644 --- a/src/reader/CaliperMetadataDB.cpp +++ b/src/reader/CaliperMetadataDB.cpp @@ -168,12 +168,12 @@ struct CaliperMetadataDB::CaliperMetadataDBImpl { // nodes merged from other MPI ranks have them already). auto unit_it = m_attr_units.find(name); if (unit_it != m_attr_units.end() && Entry(parent).get(m_unit_attr).empty()) { - Variant v_unit(static_cast(unit_it->second.c_str())); + Variant v_unit(unit_it->second.c_str()); parent = get_or_create_node(m_unit_attr, v_unit, parent); } auto alias_it = m_attr_aliases.find(name); if (alias_it != m_attr_aliases.end() && Entry(parent).get(m_alias_attr).empty()) { - Variant v_alias(static_cast(alias_it->second.c_str())); + Variant v_alias(alias_it->second.c_str()); parent = get_or_create_node(m_alias_attr, v_alias, parent); } @@ -287,7 +287,7 @@ struct CaliperMetadataDB::CaliperMetadataDBImpl { Variant v_data = node->data(); if (v_data.type() == CALI_TYPE_STRING) - v_data = make_string_variant(static_cast(v_data.data()), v_data.size()); + v_data = make_string_variant(v_data.as_c_str(), v_data.size()); return merge_node(node->id(), attr_node->id(), parent ? parent->id() : CALI_INV_ID, v_data); } @@ -354,7 +354,7 @@ struct CaliperMetadataDB::CaliperMetadataDBImpl { Variant v_value(data); if (v_value.type() == CALI_TYPE_STRING) - v_value = make_string_variant(static_cast(data.data()), data.size()); + v_value = make_string_variant(data.as_c_str(), data.size()); node = create_node(attr.id(), v_value, parent); } @@ -541,7 +541,7 @@ Node* CaliperMetadataDB::merge_node( // if value is a string, find or insert it in string DB if (v_data.type() == CALI_TYPE_STRING) - v_data = mP->make_string_variant(static_cast(value.data()), value.size()); + v_data = mP->make_string_variant(value.as_c_str(), value.size()); return mP->merge_node(node_id, attr_id, prnt_id, v_data, idmap); } diff --git a/src/services/craypat/CrayPAT.cpp b/src/services/craypat/CrayPAT.cpp index 9aa15780..87616364 100644 --- a/src/services/craypat/CrayPAT.cpp +++ b/src/services/craypat/CrayPAT.cpp @@ -65,13 +65,13 @@ class CrayPATBinding : public AnnotationBinding void on_begin(Caliper*, const Attribute& attr, const Variant& value) { if (attr.is_nested() && attr.type() == CALI_TYPE_STRING) - PAT_region_push(static_cast(value.data())); + PAT_region_push(value.as_c_str()); } void on_end(Caliper*, const Attribute& attr, const Variant& value) { if (attr.is_nested() && attr.type() == CALI_TYPE_STRING) - PAT_region_pop(static_cast(value.data())); + PAT_region_pop(value.as_c_str()); } void initialize(Caliper*, Channel* channel) diff --git a/src/services/monitor/LoopMonitor.cpp b/src/services/monitor/LoopMonitor.cpp index 36443899..d5a0990d 100644 --- a/src/services/monitor/LoopMonitor.cpp +++ b/src/services/monitor/LoopMonitor.cpp @@ -48,7 +48,7 @@ class LoopMonitor return true; for (const std::string& s : target_loops) - if (strncmp(static_cast(value.data()), s.data(), s.size()) == 0) + if (strncmp(value.as_c_str(), s.data(), s.size()) == 0) return true; return false; diff --git a/src/services/nvtx/Nvtx.cpp b/src/services/nvtx/Nvtx.cpp index b514834a..e09d54c4 100644 --- a/src/services/nvtx/Nvtx.cpp +++ b/src/services/nvtx/Nvtx.cpp @@ -120,13 +120,13 @@ class NvtxBinding : public AnnotationBinding eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; if (value.type() == CALI_TYPE_STRING) { - eventAttrib.message.ascii = static_cast(value.data()); + eventAttrib.message.ascii = value.as_c_str(); } else { std::string attr_name = std::string("nvtx.str#") + std::to_string(attr.id()); Attribute str_attr = c->create_attribute(attr_name, CALI_TYPE_STRING, CALI_ATTR_HIDDEN | CALI_ATTR_SKIP_EVENTS); std::string str = value.to_string(); Node* node = c->make_tree_entry(str_attr, Variant(CALI_TYPE_STRING, str.data(), str.size()), &m_nvtx_root_node); - eventAttrib.message.ascii = static_cast(node->data().data()); + eventAttrib.message.ascii = node->data().as_c_str(); } // For properly nested attributes, just use default push/pop. diff --git a/src/services/rocprofiler/RocTX.cpp b/src/services/rocprofiler/RocTX.cpp index a57b702e..0271aa54 100644 --- a/src/services/rocprofiler/RocTX.cpp +++ b/src/services/rocprofiler/RocTX.cpp @@ -37,7 +37,7 @@ class RocTXBinding : public AnnotationBinding std::string str; // string obj must not be deleted until end of function if (attr.type() == CALI_TYPE_STRING) { - msg = static_cast(value.data()); + msg = value.as_c_str(); } else { str = value.to_string(); msg = str.c_str(); diff --git a/src/services/vtune/VTuneBindings.cpp b/src/services/vtune/VTuneBindings.cpp index bf9286e5..c87b06e7 100644 --- a/src/services/vtune/VTuneBindings.cpp +++ b/src/services/vtune/VTuneBindings.cpp @@ -52,7 +52,7 @@ class ITTBinding : public cali::AnnotationBinding __itt_string_handle* itt_str = nullptr; { - const char* str = static_cast(val.data()); + const char* str = val.as_c_str(); auto it = s_itt_strings.lower_bound(str); if (it == s_itt_strings.end() || it->first != str) {