diff options
author | Adrian Kummerländer | 2014-02-06 20:53:38 +0100 |
---|---|---|
committer | Adrian Kummerländer | 2014-02-06 20:53:38 +0100 |
commit | 74935056c496814a3c9d1380437812536b159203 (patch) | |
tree | 9417e7604740cc53fc26c3b74604d901ffdb94b0 /src/trie.h | |
parent | 13f079c5150d86bb87b71094e545e720e245658d (diff) | |
download | Trie-74935056c496814a3c9d1380437812536b159203.tar Trie-74935056c496814a3c9d1380437812536b159203.tar.gz Trie-74935056c496814a3c9d1380437812536b159203.tar.bz2 Trie-74935056c496814a3c9d1380437812536b159203.tar.lz Trie-74935056c496814a3c9d1380437812536b159203.tar.xz Trie-74935056c496814a3c9d1380437812536b159203.tar.zst Trie-74935056c496814a3c9d1380437812536b159203.zip |
Converted detail::Result into general optional_ptr type
* Added set member method overload for easier value modification
* Idea: expand detail::optional_ptr into general optional type
Diffstat (limited to 'src/trie.h')
-rw-r--r-- | src/trie.h | 28 |
1 files changed, 18 insertions, 10 deletions
@@ -39,22 +39,28 @@ class Trie { return this->resolve(path); } - inline detail::Result<Value*> get(key_list path) { + inline detail::optional_ptr<Value> get(key_list path) { if ( auto tmp = this->resolve(path) ) { if ( tmp.get()->value_.first ) { - return detail::Result<Value*>(&tmp.get()->value_.second); + return detail::optional_ptr<Value>( + &tmp.get()->value_.second + ); } else { - return detail::Result<Value*>(); + return detail::optional_ptr<Value>(); } } else { - return detail::Result<Value*>(); + return detail::optional_ptr<Value>(); } } + inline void set(Value value) { + this->value_.first = true; + this->value_.second = value; + } + inline bool set(key_list path, Value value) { if ( auto tmp = this->resolve(path) ) { - tmp.get()->value_.first = true; - tmp.get()->value_.second = value; + tmp.get()->set(value); return true; } else { @@ -105,11 +111,11 @@ class Trie { } } - inline detail::Result<Trie*> resolve(key_list path) { + inline detail::optional_ptr<Trie> resolve(key_list path) { return this->resolve(path, path.begin()); } - inline detail::Result<Trie*> resolve( + inline detail::optional_ptr<Trie> resolve( key_list& path, typename key_list::const_iterator currStep ) { @@ -123,12 +129,14 @@ class Trie { ); if ( nextStep == path.end() ) { - return detail::Result<Trie*>(&(*matchingTrie).second); + return detail::optional_ptr<Trie>( + &(*matchingTrie).second + ); } else { return (*matchingTrie).second.resolve(path, nextStep); } } else { - return detail::Result<Trie*>(); + return detail::optional_ptr<Trie>(); } } |