diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2016-08-24 22:25:51 +1000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2017-04-19 07:49:58 +1000 |
commit | 95b4fd64dd9cd033cfbb22048cad591503d390cc (patch) | |
tree | 6b960cf029143f62d637dedc7f38fc4d38bddd5c | |
parent | f4f4c01f4c7361182b18dc3d646dfcc11e346518 (diff) |
Add DEFINE_ENUM_CONVERT macro for defining PBD::string_to/to_string for enums
A simple macro for defining the four template specializations required to
convert an enum to a string and back using the existing string_2_enum and
enum_2_string functions. Generally these will only be instantiated in one
source file, I don't think it is necessary to explicitly instantiate any at
this stage.
-rw-r--r-- | libs/pbd/pbd/enum_convert.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/libs/pbd/pbd/enum_convert.h b/libs/pbd/pbd/enum_convert.h new file mode 100644 index 0000000000..e872d408bc --- /dev/null +++ b/libs/pbd/pbd/enum_convert.h @@ -0,0 +1,56 @@ +/* + Copyright (C) 2015 Tim Mayberry + + 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 2 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef PBD_ENUM_CONVERT_H +#define PBD_ENUM_CONVERT_H + +#include "pbd/enumwriter.h" +#include "pbd/string_convert.h" + +#define TO_STRING_FULL(Type) \ + template <> \ + inline bool to_string (Type val, std::string& str) \ + { \ + str = enum_2_string (val); \ + return true; \ + } + +#define STRING_TO_FULL(Type) \ + template <> \ + inline bool string_to (const std::string& str, Type& val) \ + { \ + val = (Type)string_2_enum (str, val); \ + return true; \ + } + +#define TO_STRING(Type) \ + template<> inline std::string to_string (Type val) \ + { return enum_2_string (val); } + +#define STRING_TO(Type) \ + template<> inline Type string_to (const std::string& str) \ + { Type val; return (Type) string_2_enum (str, val); } + +#define DEFINE_ENUM_CONVERT(Type) \ + TO_STRING_FULL (Type) \ + STRING_TO_FULL (Type) \ + TO_STRING (Type) \ + STRING_TO (Type) + +#endif // PBD_ENUM_CONVERT_H |