X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fpbd%2Fenumwriter.h;h=95f1ea9e9fe3cdc88b36409cd6cd87e3d3ec9016;hb=ff2fac11a03b7e13149b5069fda2bbc21cdd4e80;hp=356a0a1acc97ac6c0120273776ad3651d21d7f97;hpb=6d4e6dc580c18ee940a30345656c70c054a6fa2d;p=ardour.git diff --git a/libs/pbd/pbd/enumwriter.h b/libs/pbd/pbd/enumwriter.h index 356a0a1acc..95f1ea9e9f 100644 --- a/libs/pbd/pbd/enumwriter.h +++ b/libs/pbd/pbd/enumwriter.h @@ -18,25 +18,39 @@ $Id$ */ +#ifndef __pbd_enumwriter_h__ +#define __pbd_enumwriter_h__ + #include #include #include #include - +#include namespace PBD { class unknown_enumeration : public std::exception { public: - virtual const char *what() const throw() { return "unknown enumerator in PBD::EnumWriter"; } + unknown_enumeration (std::string const & e) throw() { + std::stringstream s; + s << "unknown enumerator " << e << " in PBD::EnumWriter"; + _message = s.str (); + } + + ~unknown_enumeration () throw() {} + + virtual const char *what() const throw() { + return _message.c_str(); + } + +private: + std::string _message; }; class EnumWriter { public: - EnumWriter (); - ~EnumWriter (); - - static EnumWriter& instance() { return *_instance; } + static EnumWriter& instance(); + static void destroy(); void register_distinct (std::string type, std::vector, std::vector); void register_bits (std::string type, std::vector, std::vector); @@ -44,7 +58,12 @@ class EnumWriter { std::string write (std::string type, int value); int read (std::string type, std::string value); + void add_to_hack_table (std::string str, std::string hacked_str); + private: + EnumWriter (); + ~EnumWriter (); + struct EnumRegistration { std::vector values; std::vector names; @@ -65,6 +84,10 @@ class EnumWriter { int read_distinct (EnumRegistration&, std::string value); static EnumWriter* _instance; + static std::map hack_table; + + + int validate (EnumRegistration& er, int value); }; } @@ -72,3 +95,4 @@ class EnumWriter { #define enum_2_string(e) (PBD::EnumWriter::instance().write (typeid(e).name(), e)) #define string_2_enum(str,e) (PBD::EnumWriter::instance().read (typeid(e).name(), (str))) +#endif /* __pbd_enumwriter_h__ */