]> git.sesse.net Git - casparcg/blob - common/param.h
2.1.0: Refactoring.
[casparcg] / common / param.h
1 #pragma once\r
2 \r
3 #include <boost/lexical_cast.hpp>\r
4 \r
5 #include <type_traits>\r
6 #include <string>\r
7 \r
8 namespace caspar {\r
9                 \r
10 template<typename T, typename C>\r
11 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
12 {       \r
13         auto it = std::find(std::begin(params), std::end(params), name);\r
14         if(it == params.end() || ++it == params.end())  \r
15                 return fail_value;\r
16         \r
17         T value = fail_value;\r
18         try\r
19         {\r
20                 value = boost::lexical_cast<std::decay<T>::type>(*it);\r
21         }\r
22         catch(boost::bad_lexical_cast&){}\r
23 \r
24         return value;\r
25 }\r
26 \r
27 template<typename C>\r
28 std::wstring get_param(const std::wstring& name, C&& params, const std::wstring& fail_value = L"")\r
29 {       \r
30         auto it = std::find(std::begin(params), std::end(params), name);\r
31         if(it == params.end() || ++it == params.end())  \r
32                 return fail_value;\r
33         return *it;\r
34 }\r
35 \r
36 }