diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2014-07-23 17:05:58 -0700 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2014-08-05 15:59:36 -0700 |
commit | 44ba9a9eebec2ffe202fc5594f76864a56f3730a (patch) | |
tree | 3788e0507c1a116c45df7a1dd9275784de4d9b5a /src/mmo | |
parent | 738e72ef3b38eef4e0684d49873714a602df53df (diff) | |
download | tmwa-44ba9a9eebec2ffe202fc5594f76864a56f3730a.tar.gz tmwa-44ba9a9eebec2ffe202fc5594f76864a56f3730a.tar.bz2 tmwa-44ba9a9eebec2ffe202fc5594f76864a56f3730a.tar.xz tmwa-44ba9a9eebec2ffe202fc5594f76864a56f3730a.zip |
Enums are not usually integers, sorry
Diffstat (limited to 'src/mmo')
-rw-r--r-- | src/mmo/extract.cpp | 1 | ||||
-rw-r--r-- | src/mmo/extract.hpp | 5 | ||||
-rw-r--r-- | src/mmo/extract_enums.cpp | 26 | ||||
-rw-r--r-- | src/mmo/extract_enums.hpp | 69 |
4 files changed, 98 insertions, 3 deletions
diff --git a/src/mmo/extract.cpp b/src/mmo/extract.cpp index d486ed5..a480984 100644 --- a/src/mmo/extract.cpp +++ b/src/mmo/extract.cpp @@ -24,6 +24,7 @@ #include "../strings/xstring.hpp" #include "../strings/vstring.hpp" +#include "extract_enums.hpp" #include "mmo.hpp" #include "../poison.hpp" diff --git a/src/mmo/extract.hpp b/src/mmo/extract.hpp index 355e2da..ed2eb78 100644 --- a/src/mmo/extract.hpp +++ b/src/mmo/extract.hpp @@ -79,9 +79,8 @@ bool extract(XString str, TimeT *tv) return extract(str, &tv->value); } -// extra typename=void to workaround some duplicate overload rule -template<class T, typename=typename std::enable_if<std::is_enum<T>::value>::type, typename=void> -bool extract(XString str, T *iv) +template<class T, typename=typename std::enable_if<std::is_enum<T>::value>::type> +bool extract_as_int(XString str, T *iv) { typedef typename underlying_type<T>::type U; U v; diff --git a/src/mmo/extract_enums.cpp b/src/mmo/extract_enums.cpp new file mode 100644 index 0000000..f906179 --- /dev/null +++ b/src/mmo/extract_enums.cpp @@ -0,0 +1,26 @@ +#include "extract_enums.hpp" +// extract_enums.cpp - Opt-in integer extraction support for enums. +// +// Copyright © 2014 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 "../poison.hpp" + + +namespace tmwa +{ +} // namespace tmwa diff --git a/src/mmo/extract_enums.hpp b/src/mmo/extract_enums.hpp new file mode 100644 index 0000000..613fae9 --- /dev/null +++ b/src/mmo/extract_enums.hpp @@ -0,0 +1,69 @@ +#pragma once +// extract_enums.hpp - Opt-in integer extraction support for enums. +// +// Copyright © 2014 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 "fwd.hpp" + +#include <cstdint> + +#include "extract.hpp" + + +namespace tmwa +{ +namespace e +{ +enum class EPOS : uint16_t; +enum class MobMode : uint16_t; +enum class Opt1 : uint16_t; +enum class Opt2 : uint16_t; +enum class Option : uint16_t; + +inline +bool extract(XString str, EPOS *iv) { return extract_as_int(str, iv); } +inline +bool extract(XString str, MobMode *iv) { return extract_as_int(str, iv); } +inline +bool extract(XString str, Opt1 *iv) { return extract_as_int(str, iv); } +inline +bool extract(XString str, Opt2 *iv) { return extract_as_int(str, iv); } +inline +bool extract(XString str, Option *iv) { return extract_as_int(str, iv); } +} + +enum class ItemLook : uint16_t; +enum class ItemType : uint8_t; +enum class Race : uint8_t; +enum class SEX : uint8_t; +enum class SkillID : uint16_t; +enum class StatusChange : uint16_t; + +inline +bool extract(XString str, ItemLook *iv) { return extract_as_int(str, iv); } +inline +bool extract(XString str, ItemType *iv) { return extract_as_int(str, iv); } +inline +bool extract(XString str, Race *iv) { return extract_as_int(str, iv); } +inline +bool extract(XString str, SEX *iv) { return extract_as_int(str, iv); } +inline +bool extract(XString str, SkillID *iv) { return extract_as_int(str, iv); } +inline +bool extract(XString str, StatusChange *iv) { return extract_as_int(str, iv); } +} // namespace tmwa |