]> git.sesse.net Git - casparcg/blobdiff - common/param.h
2.1.0: Added missing build events.
[casparcg] / common / param.h
index 94ec4923ccaea9f8dfaf68bbcc0758f4b5a327b4..bf1056a65306a1767cda28169c9a256c2685748e 100644 (file)
@@ -1,5 +1,7 @@
 #pragma once\r
 \r
+#include "except.h"\r
+\r
 #include <boost/lexical_cast.hpp>\r
 \r
 #include <type_traits>\r
@@ -11,26 +13,40 @@ template<typename T, typename C>
 typename std::enable_if<!std::is_convertible<T, std::wstring>::value, typename std::decay<T>::type>::type get_param(const std::wstring& name, C&& params, T fail_value = T())\r
 {      \r
        auto it = std::find(std::begin(params), std::end(params), name);\r
-       if(it == params.end() || ++it == params.end())  \r
+       if(it == params.end())  \r
                return fail_value;\r
        \r
-       T value = fail_value;\r
        try\r
        {\r
-               value = boost::lexical_cast<std::decay<T>::type>(*it);\r
-       }\r
-       catch(boost::bad_lexical_cast&){}\r
+               if(++it == params.end())\r
+                       throw std::out_of_range("");\r
 \r
-       return value;\r
+               return boost::lexical_cast<std::decay<T>::type>(*it);\r
+       }\r
+       catch(...)\r
+       {               \r
+               CASPAR_THROW_EXCEPTION(invalid_argument() << msg_info("Failed to parse param.") << arg_name_info(name) << nested_exception(std::current_exception()));\r
+       }\r
 }\r
 \r
 template<typename C>\r
 std::wstring get_param(const std::wstring& name, C&& params, const std::wstring& fail_value = L"")\r
 {      \r
        auto it = std::find(std::begin(params), std::end(params), name);\r
-       if(it == params.end() || ++it == params.end())  \r
+       if(it == params.end())  \r
                return fail_value;\r
-       return *it;\r
+       \r
+       try\r
+       {\r
+               if(++it == params.end())\r
+                       throw std::out_of_range("");\r
+\r
+               return *it;     \r
+       }\r
+       catch(...)\r
+       {               \r
+               CASPAR_THROW_EXCEPTION(invalid_argument() << msg_info("Failed to parse param.") << arg_name_info(name) << nested_exception(std::current_exception()));\r
+       }\r
 }\r
 \r
 }
\ No newline at end of file