]> git.sesse.net Git - casparcg/blob - common/param.h
set svn:eol-style native on .h and .cpp files
[casparcg] / common / param.h
1 #pragma once
2
3 #include "except.h"
4
5 #include <boost/lexical_cast.hpp>
6
7 #include <type_traits>
8 #include <string>
9
10 namespace caspar {
11                 
12 template<typename T, typename C>
13 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())
14 {       
15         auto it = std::find(std::begin(params), std::end(params), name);
16         if(it == params.end())  
17                 return fail_value;
18         
19         try
20         {
21                 if(++it == params.end())
22                         throw std::out_of_range("");
23
24                 return boost::lexical_cast<std::decay<T>::type>(*it);
25         }
26         catch(...)
27         {               
28                 CASPAR_THROW_EXCEPTION(invalid_argument() << msg_info("Failed to parse param.") << arg_name_info(name) << nested_exception(std::current_exception()));
29         }
30 }
31
32 template<typename C>
33 std::wstring get_param(const std::wstring& name, C&& params, const std::wstring& fail_value = L"")
34 {       
35         auto it = std::find(std::begin(params), std::end(params), name);
36         if(it == params.end())  
37                 return fail_value;
38         
39         try
40         {
41                 if(++it == params.end())
42                         throw std::out_of_range("");
43
44                 return *it;     
45         }
46         catch(...)
47         {               
48                 CASPAR_THROW_EXCEPTION(invalid_argument() << msg_info("Failed to parse param.") << arg_name_info(name) << nested_exception(std::current_exception()));
49         }
50 }
51
52 }