11// Copyright 2023 The MathWorks, Inc.
22
33
4- #include " opentelemetry-matlab/trace /attribute.h"
4+ #include " opentelemetry-matlab/common /attribute.h"
55
66#include " opentelemetry/nostd/span.h"
77
88namespace libmexclass ::opentelemetry {
99
1010void processAttribute (const std::string& attrname, // input, attribute name
1111 const matlab::data::Array& attrvalue, // input, unprocessed attribute value
12- std::list<std::pair<std::string, common::AttributeValue> >& attrs, // output, processed attribute name-value pair
13- std::list<std::string >& string_buffer, // buffer to store processed string attribute values
14- std::list<std::vector<nostd::string_view> >& stringview_buffer, // buffer used only for string array attributes
15- std::list<std::vector<double > >& dimensions_buffer) // buffer for array dimensions of nonscalar attribute values
12+ ProcessedAttributes& attrs) // output, processed attribute struct
1613{
1714 std::vector<double > attrvalue_dims_buffer; // dimensions of array attribute, cast to double
1815
@@ -24,69 +21,68 @@ void processAttribute(const std::string& attrname, // input, attribute name
2421 if (nelements == 1 ) { // scalar case
2522 if (valtype == matlab::data::ArrayType::DOUBLE) {
2623 matlab::data::TypedArray<double > attrvalue_mda = attrvalue;
27- attrs.push_back (std::pair<std::string, common::AttributeValue>(attrname, attrvalue_mda[0 ]));
24+ attrs.Attributes . push_back (std::pair<std::string, common::AttributeValue>(attrname, attrvalue_mda[0 ]));
2825 } else if (valtype == matlab::data::ArrayType::INT32) {
2926 matlab::data::TypedArray<int32_t > attrvalue_mda = attrvalue;
30- attrs.push_back (std::pair<std::string, common::AttributeValue>(attrname, attrvalue_mda[0 ]));
27+ attrs.Attributes . push_back (std::pair<std::string, common::AttributeValue>(attrname, attrvalue_mda[0 ]));
3128 } else if (valtype == matlab::data::ArrayType::UINT32) {
3229 matlab::data::TypedArray<uint32_t > attrvalue_mda = attrvalue;
33- attrs.push_back (std::pair<std::string, common::AttributeValue>(attrname, attrvalue_mda[0 ]));
30+ attrs.Attributes . push_back (std::pair<std::string, common::AttributeValue>(attrname, attrvalue_mda[0 ]));
3431 } else if (valtype == matlab::data::ArrayType::INT64) {
3532 matlab::data::TypedArray<int64_t > attrvalue_mda = attrvalue;
36- attrs.push_back (std::pair<std::string, common::AttributeValue>(attrname, attrvalue_mda[0 ]));
33+ attrs.Attributes . push_back (std::pair<std::string, common::AttributeValue>(attrname, attrvalue_mda[0 ]));
3734 } else if (valtype == matlab::data::ArrayType::LOGICAL) {
3835 matlab::data::TypedArray<bool > attrvalue_mda = attrvalue;
39- attrs.push_back (std::pair<std::string, common::AttributeValue>(attrname, attrvalue_mda[0 ]));
36+ attrs.Attributes . push_back (std::pair<std::string, common::AttributeValue>(attrname, attrvalue_mda[0 ]));
4037 } else { // string
4138 matlab::data::StringArray attrvalue_mda = attrvalue;
42- // string_buffer.push_back(static_cast<std::string>(attrvalue_mda[0]));
43- string_buffer.push_back (static_cast <std::string>(*(attrvalue_mda.begin ())));
44- attrs.push_back (std::pair<std::string, common::AttributeValue>(attrname, string_buffer.back ()));
39+ attrs.StringBuffer .push_back (static_cast <std::string>(*(attrvalue_mda.begin ())));
40+ attrs.Attributes .push_back (std::pair<std::string, common::AttributeValue>(attrname, attrs.StringBuffer .back ()));
4541 }
4642 } else { // array case
4743 if (valtype == matlab::data::ArrayType::DOUBLE) {
4844 matlab::data::TypedArray<double > attrvalue_mda = attrvalue;
49- attrs.push_back (std::pair<std::string, common::AttributeValue>(attrname,
45+ attrs.Attributes . push_back (std::pair<std::string, common::AttributeValue>(attrname,
5046 nostd::span<const double >{&(*attrvalue_mda.cbegin ()), &(*attrvalue_mda.cend ())}));
5147 } else if (valtype == matlab::data::ArrayType::INT32) {
5248 matlab::data::TypedArray<int32_t > attrvalue_mda = attrvalue;
53- attrs.push_back (std::pair<std::string, common::AttributeValue>(attrname,
49+ attrs.Attributes . push_back (std::pair<std::string, common::AttributeValue>(attrname,
5450 nostd::span<const int32_t >{&(*attrvalue_mda.cbegin ()), &(*attrvalue_mda.cend ())}));
5551 } else if (valtype == matlab::data::ArrayType::UINT32) {
5652 matlab::data::TypedArray<uint32_t > attrvalue_mda = attrvalue;
57- attrs.push_back (std::pair<std::string, common::AttributeValue>(attrname,
53+ attrs.Attributes . push_back (std::pair<std::string, common::AttributeValue>(attrname,
5854 nostd::span<const uint32_t >{&(*attrvalue_mda.cbegin ()), &(*attrvalue_mda.cend ())}));
5955 } else if (valtype == matlab::data::ArrayType::INT64) {
6056 matlab::data::TypedArray<int64_t > attrvalue_mda = attrvalue;
61- attrs.push_back (std::pair<std::string, common::AttributeValue>(attrname,
57+ attrs.Attributes . push_back (std::pair<std::string, common::AttributeValue>(attrname,
6258 nostd::span<const int64_t >{&(*attrvalue_mda.cbegin ()), &(*attrvalue_mda.cend ())}));
6359 } else if (valtype == matlab::data::ArrayType::LOGICAL) {
6460 matlab::data::TypedArray<bool > attrvalue_mda = attrvalue;
65- attrs.push_back (std::pair<std::string, common::AttributeValue>(attrname,
61+ attrs.Attributes . push_back (std::pair<std::string, common::AttributeValue>(attrname,
6662 nostd::span<const bool >{&(*attrvalue_mda.cbegin ()), &(*attrvalue_mda.cend ())}));
6763 } else { // string
6864 matlab::data::StringArray attrvalue_mda = attrvalue;
6965 std::vector<nostd::string_view> strarray_attr;
7066 strarray_attr.reserve (nelements);
7167
7268 for (auto itr = attrvalue_mda.begin (); itr < attrvalue_mda.end (); ++itr) {
73- string_buffer .push_back (static_cast <std::string>(*itr));
74- strarray_attr.push_back (string_buffer .back ());
69+ attrs. StringBuffer .push_back (static_cast <std::string>(*itr));
70+ strarray_attr.push_back (attrs. StringBuffer .back ());
7571 }
76- stringview_buffer .push_back (strarray_attr);
77- attrs.push_back (std::pair<std::string, common::AttributeValue>(attrname,
78- nostd::span<const nostd::string_view>{&(*stringview_buffer. back ().cbegin ()), &(*stringview_buffer .back ().cend ())}));
72+ attrs. StringViewBuffer .push_back (strarray_attr);
73+ attrs.Attributes . push_back (std::pair<std::string, common::AttributeValue>(attrname,
74+ nostd::span<const nostd::string_view>{&(*attrs. StringViewBuffer . back ().cbegin ()), &(*attrs. StringViewBuffer .back ().cend ())}));
7975 }
8076 // Add a size attribute to preserve the shape
8177 std::string sizeattr{attrname + " .size" };
8278 matlab::data::ArrayDimensions::iterator copyfrom;
8379 for (copyfrom = attrdims.begin (); copyfrom != attrdims.end (); ++copyfrom) {
8480 attrvalue_dims_buffer.push_back (static_cast <double >(*copyfrom));
8581 }
86- dimensions_buffer .push_back (attrvalue_dims_buffer);
87- attrs.push_back (std::pair<std::string, common::AttributeValue>(sizeattr,
88- nostd::span<const double >{&(*dimensions_buffer .back ().cbegin ()),
89- &(*dimensions_buffer .back ().cend ())}));
82+ attrs. DimensionsBuffer .push_back (attrvalue_dims_buffer);
83+ attrs.Attributes . push_back (std::pair<std::string, common::AttributeValue>(sizeattr,
84+ nostd::span<const double >{&(*attrs. DimensionsBuffer .back ().cbegin ()),
85+ &(*attrs. DimensionsBuffer .back ().cend ())}));
9086 }
9187}
9288} // namespace
0 commit comments