Added dictionary template class based on GenericArray of KeyValue pairs

This commit is contained in:
Alex Alvarado
2022-04-11 20:57:21 +02:00
parent c26471894a
commit 4430602e23

68
include/Dictionary.hpp Normal file
View File

@ -0,0 +1,68 @@
#include <WString.h>
#include "KeyValuePair.hpp"
#include "GenericArray.hpp"
#include "logger.hpp"
template <typename K, typename V>
class Dictionary : public GenericArray<KeyValuePair<K, V>>
{
public:
void Set(K key, V value)
{
if (!ContainsKey(key))
{
this->Append(KeyValuePair<K, V>(key, value));
return;
}
this->data[IndexOf(key)] = new KeyValuePair<K, V>(key, value);
}
KeyValuePair<K, V> Get(int index)
{
if (this->Count() > index)
return *this->data[index];
return KeyValuePair<K, V>();
}
KeyValuePair<K, V> Get(K key)
{
int index = this->IndexOf(key);
if (index >= 0)
return this->Get(index);
return KeyValuePair<K, V>();
}
bool ContainsKey(K key)
{
return this->IndexOf(key) >= 0;
}
int IndexOf(K Key)
{
for (size_t i = 0; i < this->Count(); i++)
{
if ((*this->data[i]).GetKey() == Key)
return i;
}
return -1;
}
V &operator[](K key)
{
int index = this->IndexOf(key);
if (index >= 0)
{
return this->Get(index).GetValue();
}
return KeyValuePair<K, V>();
}
KeyValuePair<K, V> &operator[](int index)
{
if (index >= 0)
{
return this->Get(index).GetValue();
}
return KeyValuePair<K, V>();
}
};