diff --git a/include/data.h b/include/data.h index 187dbd5..c9350e7 100644 --- a/include/data.h +++ b/include/data.h @@ -125,6 +125,13 @@ class Data * @return Modifier* nullptr in case it isn't found */ Modifier *modifier(const char *name, size_t size) const; + + /** + * contains a specific value + * @param const Value* a pointer to the value + * @return boolean + */ + bool contains(const Value *value) const; }; /** diff --git a/src/data.cpp b/src/data.cpp index f37fb70..3fab002 100644 --- a/src/data.cpp +++ b/src/data.cpp @@ -251,6 +251,25 @@ Modifier *Data::modifier(const char* name, size_t size) const return iter->second; } +/** + * contains a specific value + * @param const Value* a pointer to the value + * @return boolean + */ +bool Data::contains(const Value *value) const +{ + // iterate over all values + for (const auto &variable :_variables) + { + // if pointers are identical it is in the data object + if (variable.second == value) return true; + } + + // the value was not found + return false; +} + + /** * End namespace */ diff --git a/src/handler.h b/src/handler.h index 9faac3f..9bf8c9e 100644 --- a/src/handler.h +++ b/src/handler.h @@ -270,6 +270,9 @@ class Handler if (v.get() == value) return false; } + // if it is already hold by the data object we also do not have to manage it + if (_data->contains(value)) return false; + // If they are not we start managing it _managed_local_values.emplace_back(value);