1
1

Attributes: Add function to retrieve span without adding attribute

Previously, the only versions of attribute access that gave a span would
also add the attribute when it doesn't exist, which isn't always wanted.
This commit is contained in:
2022-09-12 10:36:56 -05:00
parent ce07bc3628
commit e37f3388b1
2 changed files with 28 additions and 0 deletions

View File

@@ -552,6 +552,11 @@ class MutableAttributeAccessor : public AttributeAccessor {
*/
GAttributeWriter lookup_for_write(const AttributeIDRef &attribute_id);
/**
* Same as above, but returns a type that makes it easier to work with the attribute as a span.
*/
GSpanAttributeWriter lookup_for_write_span(const AttributeIDRef &attribute_id);
/**
* Get a writable attribute or non if it does not exist.
* Make sure to call #finish after changes are done.
@@ -568,6 +573,19 @@ class MutableAttributeAccessor : public AttributeAccessor {
return attribute.typed<T>();
}
/**
* Same as above, but returns a type that makes it easier to work with the attribute as a span.
*/
template<typename T>
SpanAttributeWriter<T> lookup_for_write_span(const AttributeIDRef &attribute_id)
{
AttributeWriter<T> attribute = this->lookup_for_write<T>(attribute_id);
if (attribute) {
return SpanAttributeWriter<T>{std::move(attribute), true};
}
return {};
}
/**
* Create a new attribute.
* \return True, when a new attribute has been created. False, when it's not possible to create

View File

@@ -875,6 +875,16 @@ GAttributeWriter MutableAttributeAccessor::lookup_for_write(const AttributeIDRef
return attribute;
}
GSpanAttributeWriter MutableAttributeAccessor::lookup_for_write_span(
const AttributeIDRef &attribute_id)
{
GAttributeWriter attribute = this->lookup_for_write(attribute_id);
if (attribute) {
return GSpanAttributeWriter{std::move(attribute), true};
}
return {};
}
GAttributeWriter MutableAttributeAccessor::lookup_or_add_for_write(
const AttributeIDRef &attribute_id,
const eAttrDomain domain,