]> git.sesse.net Git - casparcg/commitdiff
2.1.0: Updated param parsing.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 13 Feb 2012 09:17:08 +0000 (09:17 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 13 Feb 2012 09:17:08 +0000 (09:17 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.1.0@2385 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

common/param.h
modules/bluefish/consumer/bluefish_consumer.cpp
modules/decklink/producer/decklink_producer.cpp

index 94ec4923ccaea9f8dfaf68bbcc0758f4b5a327b4..46ddb639048d7be031f69d6b1914dc3b7cb67bc3 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
+               BOOST_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
+               BOOST_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
index 63b689a114ac339232da8d4d2721dc80f3a22b0c..9e9bed30729248a84e494dc481c8eba85dd89d97 100644 (file)
@@ -357,7 +357,7 @@ spl::shared_ptr<core::frame_consumer> create_consumer(const std::vector<std::wst
 {\r
        if(params.size() < 1 || params[0] != L"BLUEFISH")\r
                return core::frame_consumer::empty();\r
-               \r
+\r
        const auto device_index = params.size() > 1 ? boost::lexical_cast<int>(params[1]) : 1;\r
 \r
        const auto embedded_audio = std::find(params.begin(), params.end(), L"EMBEDDED_AUDIO") != params.end();\r
index 89aed0f030f37274b4a6912221c1a1f284fc2f8a..5961e999ce145694bfb4f867c387a5510e1bfcec 100644 (file)
@@ -343,7 +343,7 @@ spl::shared_ptr<core::frame_producer> create_producer(const spl::shared_ptr<core
        auto device_index       = get_param(L"DEVICE", params, -1);\r
        if(device_index == -1)\r
                device_index = boost::lexical_cast<int>(params.at(1));\r
-\r
+       \r
        auto filter_str         = get_param(L"FILTER", params);         \r
        auto length                     = get_param(L"LENGTH", params, std::numeric_limits<uint32_t>::max());   \r
        auto format_desc        = core::video_format_desc(get_param(L"FORMAT", params, L"INVALID"));\r