2 #ifndef GAUDISVC_ANNOTATION_H
3 #define GAUDISVC_ANNOTATION_H 1
12 #include "AIDA/IAnnotation.h"
29 const std::string &
value,
36 std::string
value(
const std::string & key)
const;
39 void setValue(
const std::string & key,
40 const std::string& value);
50 std::string
key(
int index)
const;
51 std::string
value(
int index)
const;
81 const std::string &
value,
91 auto iKey = m_identifiers.find( key );
92 if ( iKey == m_identifiers.end() )
return false;
94 unsigned int indexToBeRemoved = iKey->second;
97 if ( m_annotationItems[indexToBeRemoved].m_sticky )
return false;
101 m_identifiers.clear();
102 std::vector< AnnotationItem > annotationItemsNew;
103 if ( m_annotationItems.size() > 1 ) annotationItemsNew.reserve( m_annotationItems.size() - 1 );
104 for (
unsigned int iItem = 0; iItem < m_annotationItems.size(); ++iItem ) {
105 if ( iItem == indexToBeRemoved )
continue;
106 const auto&
item = m_annotationItems[ iItem ];
107 annotationItemsNew.emplace_back(
item.m_key,
item.m_value,
item.m_sticky );
108 m_identifiers.emplace(
item.m_key, annotationItemsNew.size() - 1 );
110 m_annotationItems = std::move(annotationItemsNew);
116 auto iKey = m_identifiers.find( key );
117 return iKey != m_identifiers.end() ? m_annotationItems[ iKey->second ].m_value
123 auto iKey = m_identifiers.find( key );
124 if ( iKey == m_identifiers.end() )
128 m_annotationItems[ iKey->second ].m_value =
value;
133 auto iKey = m_identifiers.find( key );
134 if ( iKey != m_identifiers.end() ) m_annotationItems[ iKey->second ].m_sticky = sticky;
138 return m_annotationItems.size();
143 if ( index < 0 || index >= static_cast<int>(m_annotationItems.size()) )
return emptyString;
144 return m_annotationItems[ index ].m_key;
149 if ( index < 0 || index >= static_cast<int>(m_annotationItems.size()) )
return emptyString;
150 return m_annotationItems[ index ].m_value;
156 std::vector< std::string > itemsToRemove;
157 itemsToRemove.reserve( size() );
158 for (
const auto&
item : m_annotationItems ) {
159 if ( !
item.m_sticky ) itemsToRemove.push_back(
item.m_key );
161 for (
const auto&
i : itemsToRemove ) removeItem(
i);
std::map< std::string, unsigned int > m_identifiers
The map of strings to identifiers.
Internal private annotation item class.
~Annotation() override=default
Destructor.
bool removeItem(const std::string &key)
Remove the item indicated by a given key.
AnnotationItem(std::string k="", std::string v="", bool vis=true)
std::string value(const std::string &key) const
Retrieve the value for a given key.
Implementation of the AIDA IAnnotation interface class.
bool addItem(const std::string &key, const std::string &value, bool sticky=false)
Add a key/value pair with a given sticky.
Annotation()=default
Constructor.
void reset()
Remove all the non-sticky items.
std::string key(int index) const
Individual access to the Annotation-items.
int size() const
Get the number of items in the Annotation.
void setSticky(const std::string &key, bool sticky)
Set sticky for a given key.
~AnnotationItem()=default
void setValue(const std::string &key, const std::string &value)
Set value for a given key.
std::vector< AnnotationItem > m_annotationItems
The vector of the annotation items.