Move PBD::canonical_path to pbd/file_utils.h/cc and reimplement for Windows
[ardour.git] / libs / pbd / pbd / enumwriter.h
index 461665d739f0a7b9ad1116bf0677d5354f3bfcd4..6f2333277de93f4dcc85aa7b54cde42be1987817 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
     Copyright (C) 2006 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
 #include <string>
 #include <vector>
 #include <exception>
+#include <sstream>
 
+#include "pbd/libpbd_visibility.h"
 
 namespace PBD {
 
-class unknown_enumeration : public std::exception {
+class LIBPBD_API 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 {
+class LIBPBD_API EnumWriter {
   public:
        static EnumWriter& instance();
+       static void destroy();
 
        void register_distinct (std::string type, std::vector<int>, std::vector<std::string>);
        void register_bits     (std::string type, std::vector<int>, std::vector<std::string>);
@@ -56,7 +72,7 @@ class EnumWriter {
            bool bitwise;
 
            EnumRegistration() {}
-           EnumRegistration (std::vector<int>& v, std::vector<std::string>& s, bool b) 
+           EnumRegistration (std::vector<int>& v, std::vector<std::string>& s, bool b)
                    : values (v), names (s), bitwise (b) {}
        };
 
@@ -71,6 +87,9 @@ class EnumWriter {
 
        static EnumWriter* _instance;
        static std::map<std::string,std::string> hack_table;
+
+        int validate (EnumRegistration& er, int value) const;
+        int validate_bitwise (EnumRegistration& er, int value) const;
 };
 
 }