X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fpbd%2Fenumwriter.h;h=95f1ea9e9fe3cdc88b36409cd6cd87e3d3ec9016;hb=a459f96e38f569503e6d983808210d9d43a396ec;hp=f53388f3cc1e0d4a5bf5f2b0b38e8de1ba5a201d;hpb=532f6aad4ac79ca15d69deccd18fca90e444c437;p=ardour.git diff --git a/libs/pbd/pbd/enumwriter.h b/libs/pbd/pbd/enumwriter.h index f53388f3cc..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); @@ -47,6 +61,9 @@ class EnumWriter { void add_to_hack_table (std::string str, std::string hacked_str); private: + EnumWriter (); + ~EnumWriter (); + struct EnumRegistration { std::vector values; std::vector names; @@ -68,6 +85,9 @@ class EnumWriter { static EnumWriter* _instance; static std::map hack_table; + + + int validate (EnumRegistration& er, int value); }; } @@ -75,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__ */