From 95b4fd64dd9cd033cfbb22048cad591503d390cc Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Wed, 24 Aug 2016 22:25:51 +1000 Subject: [PATCH] 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. --- libs/pbd/pbd/enum_convert.h | 56 +++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 libs/pbd/pbd/enum_convert.h 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