diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2014-03-15 19:34:59 -0700 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2014-03-16 18:58:48 -0700 |
commit | c812c92d1a1835f0bda783e709481188c8d92225 (patch) | |
tree | b401ede48a088ad1aaed88fe3b997cd26ff7ae08 /src/common/db.hpp | |
parent | de9ee1b9754af9d954487121947352f32d7ebb7e (diff) | |
download | tmwa-c812c92d1a1835f0bda783e709481188c8d92225.tar.gz tmwa-c812c92d1a1835f0bda783e709481188c8d92225.tar.bz2 tmwa-c812c92d1a1835f0bda783e709481188c8d92225.tar.xz tmwa-c812c92d1a1835f0bda783e709481188c8d92225.zip |
Clean up header organization
Diffstat (limited to 'src/common/db.hpp')
-rw-r--r-- | src/common/db.hpp | 180 |
1 files changed, 0 insertions, 180 deletions
diff --git a/src/common/db.hpp b/src/common/db.hpp deleted file mode 100644 index 0384f1c..0000000 --- a/src/common/db.hpp +++ /dev/null @@ -1,180 +0,0 @@ -#ifndef DB_HPP -#define DB_HPP -// db.hpp - convenience wrappers over std::map<K, V> -// -// Copyright © 2013 Ben Longbons <b.r.longbons@gmail.com> -// -// This file is part of The Mana World (Athena server) -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -# include "../sanity.hpp" - -# include <map> -# include <memory> - -template<class K, class V> -class Map -{ - typedef std::map<K, V> Impl; - - Impl impl; -public: - Map() = default; - Map(std::initializer_list<std::pair<const K, V>> il) - : impl(il) - {} - typedef typename Impl::iterator iterator; - typedef typename Impl::const_iterator const_iterator; - - iterator begin() { return impl.begin(); } - iterator end() { return impl.end(); } - const_iterator begin() const { return impl.begin(); } - const_iterator end() const { return impl.end(); } - - V *search(const K& k) - { - iterator it = impl.find(k); - if (it == impl.end()) - return nullptr; - return &it->second; - } - const V *search(const K& k) const - { - const_iterator it = impl.find(k); - if (it == impl.end()) - return nullptr; - return &it->second; - } - void insert(const K& k, V v) - { - // As far as I can tell, this is the simplest way to - // implement move-only insert-with-replacement. - iterator it = impl.lower_bound(k); - // invariant: if it is valid, it->first >= k - if (it != impl.end() && it->first == k) - it->second = std::move(v); - else - it = impl.insert(std::pair<K, V>(std::move(k), std::move(v))).first; - return (void)&it->second; - - } - V *init(const K& k) - { - return &impl[k]; - } - void erase(const K& k) - { - impl.erase(k); - } - void clear() - { - impl.clear(); - } - bool empty() const - { - return impl.empty(); - } - size_t size() const - { - return impl.size(); - } -}; - -template<class K, class V> -class DMap -{ - typedef Map<K, V> Impl; - - Impl impl; -public: - typedef typename Impl::iterator iterator; - typedef typename Impl::const_iterator const_iterator; - - iterator begin() { return impl.begin(); } - iterator end() { return impl.end(); } - const_iterator begin() const { return impl.begin(); } - const_iterator end() const { return impl.end(); } - - // const V& ? with a static default V? - V get(const K& k) - { - V *vp = impl.search(k); - return vp ? *vp : V(); - } - void put(const K& k, V v) - { - if (v == V()) - impl.erase(k); - else - impl.insert(k, std::move(v)); - } - void clear() - { - impl.clear(); - } - bool empty() const - { - return impl.empty(); - } - size_t size() const - { - return impl.size(); - } -}; - -template<class K, class V> -class UPMap -{ - typedef std::unique_ptr<V> U; - typedef Map<K, U> Impl; - - Impl impl; -public: - typedef typename Impl::iterator iterator; - typedef typename Impl::const_iterator const_iterator; - - iterator begin() { return impl.begin(); } - iterator end() { return impl.end(); } - const_iterator begin() const { return impl.begin(); } - const_iterator end() const { return impl.end(); } - - // const V& ? with a static default V? - V *get(const K& k) - { - U *up = impl.search(k); - return up ? up->get() : nullptr; - } - void put(const K& k, U v) - { - if (!v) - impl.erase(k); - else - impl.insert(k, std::move(v)); - } - void clear() - { - impl.clear(); - } - bool empty() const - { - return impl.empty(); - } - size_t size() const - { - return impl.size(); - } -}; - -#endif // DB_HPP |