]> git.sesse.net Git - casparcg/blobdiff - common/param.h
[streaming_consumer] Implemented support for separating audio channels into separate...
[casparcg] / common / param.h
index 2a0f63224b81277d30f8ad909c8744fd76e42265..91d9fa4d873c75c4610c3387938f1a41e601992c 100644 (file)
@@ -24,6 +24,21 @@ bool contains_param(const std::wstring& name, C&& params)
        return std::find_if(params.begin(), params.end(), param_comparer(name)) != params.end();
 }
 
+template<typename C>
+bool get_and_consume_flag(const std::wstring& flag_param, C& params)
+{
+       auto flag_it = std::find_if(params.begin(), params.end(), param_comparer(flag_param));
+       bool flag = false;
+
+       if (flag_it != params.end())
+       {
+               flag = true;
+               params.erase(flag_it);
+       }
+
+       return flag;
+}
+
 template<typename C>
 void replace_placeholders(const std::wstring& placeholder, const std::wstring& replacement, C&& params)
 {
@@ -52,11 +67,11 @@ static std::vector<std::wstring> protocol_split(const std::wstring& s)
 
 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())
-{      
+{
        auto it = std::find_if(std::begin(params), std::end(params), param_comparer(name));
-       if(it == params.end())  
+       if(it == params.end())
                return fail_value;
-       
+
        try
        {
                if(++it == params.end())
@@ -65,27 +80,27 @@ typename std::enable_if<!std::is_convertible<T, std::wstring>::value, typename s
                return boost::lexical_cast<typename std::decay<T>::type>(*it);
        }
        catch(...)
-       {               
+       {
                CASPAR_THROW_EXCEPTION(user_error() << msg_info(L"Failed to parse param " + name) << nested_exception(std::current_exception()));
        }
 }
 
 template<typename C>
 std::wstring get_param(const std::wstring& name, C&& params, const std::wstring& fail_value = L"")
-{      
+{
        auto it = std::find_if(std::begin(params), std::end(params), param_comparer(name));
-       if(it == params.end())  
+       if(it == params.end())
                return fail_value;
-       
+
        try
        {
                if(++it == params.end())
                        throw std::out_of_range("");
 
-               return *it;     
+               return *it;
        }
        catch(...)
-       {               
+       {
                CASPAR_THROW_EXCEPTION(user_error() << msg_info(L"Failed to parse param " + name) << nested_exception(std::current_exception()));
        }
 }