Rework Dictionary::TryGet to use std::optional.
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Deukhoofd 2020-12-12 12:53:47 +01:00
parent 362e4bf59b
commit 96315cb857
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
2 changed files with 7 additions and 10 deletions

View File

@ -46,13 +46,12 @@ namespace ArbUt {
/// @brief Try to get an item from the dictionary using a key. Returns false if no item is found, and out will
/// not be touched in that case.
inline bool TryGet(const KeyT& key, ValueT& out) const noexcept {
inline std::optional<std::reference_wrapper<const ValueT>> TryGet(const KeyT& key) const noexcept {
const auto& find = _map.find(key);
if (find == _map.end()) {
return false;
return {};
}
out = find->second;
return true;
return std::ref(find->second);
}
/// @brief Removes an item with a certain key from the dictionary

View File

@ -48,16 +48,14 @@ TEST_CASE("Create Dictionary, insert value, then update value") {
TEST_CASE("Create Dictionary, insert value, try get value") {
auto dic = Dictionary<int, int>(5);
dic.Insert(10, 5);
int result = 0;
CHECK(dic.TryGet(10, result));
CHECK(result == 5);
auto v = dic.TryGet(10);
CHECK(v.has_value());
CHECK(v.value() == 5);
}
TEST_CASE("Create Dictionary, insert value, try get non existing value") {
auto dic = Dictionary<int, int>(5);
int result = 0;
CHECK_FALSE(dic.TryGet(10, result));
CHECK(result == 0);
CHECK_FALSE(dic.TryGet(10).has_value());
}
TEST_CASE("Create Dictionary, insert value, Has") {