#pragma once\r
\r
+#include "except.h"\r
+\r
#include <boost/lexical_cast.hpp>\r
\r
#include <type_traits>\r
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
{\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
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