86 mycurl_param_element(
const T & arg): val(arg) {};
87 mycurl_param_element(
const mycurl_param_element<T> & e): val(e.val) {};
88 mycurl_param_element(mycurl_param_element<T> && e)
noexcept: val(std::move(e.val)) {};
89 mycurl_param_element<T> & operator = (
const mycurl_param_element<T> & e) { val = e.val;
return this; };
90 mycurl_param_element<T> & operator = (mycurl_param_element<T> && e) { val = std::move(e.val);
return this; };
91 ~mycurl_param_element() =
default;
95 const mycurl_param_element<T>* arg_ptr =
dynamic_cast<const mycurl_param_element<T>*
>(&arg);
96 if(arg_ptr ==
nullptr)
98 return arg_ptr->val == val;
101 T get_value()
const {
return val; };
102 const T* get_value_address()
const {
return &val; };
103 void set_value(
const T & arg) { val = arg; };
105 virtual std::unique_ptr<mycurl_param_element_generic> clone()
const override
107 std::unique_ptr<mycurl_param_element_generic> ret;
111 ret = std::make_unique<mycurl_param_element<T> >(val);
113 throw Ememory(
"mycurl_param_list::clone");
117 throw Ememory(
"mycurl_param_list::clone");
131 class mycurl_param_list
134#ifndef LIBCURL_AVAILABLE
137 mycurl_param_list() {};
141 mycurl_param_list() { reset_read(); };
143 mycurl_param_list(
const mycurl_param_list & ref) { copy_from(ref); };
144 mycurl_param_list(mycurl_param_list && ref)
noexcept =
default;
145 mycurl_param_list & operator = (
const mycurl_param_list & ref) { element_list.clear(); copy_from(ref); reset_read();
return *
this; };
146 mycurl_param_list & operator = (mycurl_param_list && ref) =
default;
147 ~mycurl_param_list() =
default;
151 template<
class T>
void add(CURLoption opt,
const T & val) { element_list[opt] = std::make_unique<mycurl_param_element<T> >(val); reset_read(); }
152 void clear(CURLoption opt);
153 void clear() { element_list.clear(); reset_read(); };
154 U_I size()
const {
return element_list.size(); };
155 void reset_read()
const { cursor = element_list.begin(); };
156 bool read_next(CURLoption & opt);
158 template<
class T>
void read_opt(
const T* & val)
const
160 if(cursor == element_list.end())
161 throw Erange(
"mycurl_param_list::read_opt",
"Cannot read option when no more option is available");
168 val = ptr->get_value_address();
178 template<
class T>
bool get_val(CURLoption opt,
const T* & val)
const
180 std::map<CURLoption, std::unique_ptr<mycurl_param_element_generic> >::const_iterator it = element_list.find(opt);
182 if(it == element_list.end())
190 val = ptr->get_value_address();
214 std::list<CURLoption> update_with(
const mycurl_param_list & wanted);
217 std::map<CURLoption, std::unique_ptr<mycurl_param_element_generic> > element_list;
218 mutable std::map<CURLoption, std::unique_ptr<mycurl_param_element_generic> >::const_iterator cursor;
221 void copy_from(
const mycurl_param_list & ref);