| 10329 | |
| 10330 | template <typename T> |
| 10331 | class vv_size_handler_t : public exprtk::igeneric_function<T> |
| 10332 | { |
| 10333 | public: |
| 10334 | |
| 10335 | typedef typename exprtk::igeneric_function<T> igfun_t; |
| 10336 | typedef typename igfun_t::parameter_list_t parameter_list_t; |
| 10337 | typedef typename igfun_t::generic_type generic_type; |
| 10338 | typedef typename generic_type::vector_view vector_t; |
| 10339 | typedef typename generic_type::scalar_view scalar_t; |
| 10340 | typedef exprtk::vector_view<T>* vv_ptr_t; |
| 10341 | typedef std::map<void*,vv_ptr_t> map_t; |
| 10342 | |
| 10343 | using exprtk::igeneric_function<T>::operator(); |
| 10344 | |
| 10345 | vv_size_handler_t() |
| 10346 | : exprtk::igeneric_function<T>("VT") |
| 10347 | {} |
| 10348 | |
| 10349 | inline T operator()(parameter_list_t parameters) |
| 10350 | { |
| 10351 | vector_t vector(parameters[0]); |
| 10352 | size_t new_size = static_cast<std::size_t>(scalar_t(parameters[1])()); |
| 10353 | void* key = static_cast<void*>(&vector[0]); |
| 10354 | |
| 10355 | typename map_t::iterator itr = vector_map_.find(key); |
| 10356 | |
| 10357 | if (itr == vector_map_.end()) |
| 10358 | { |
| 10359 | return T(0); |
| 10360 | } |
| 10361 | |
| 10362 | exprtk::vector_view<T>& vv = *itr->second; |
| 10363 | |
| 10364 | if (vv.base_size() < new_size) |
| 10365 | { |
| 10366 | return T(0); |
| 10367 | } |
| 10368 | |
| 10369 | return vv.set_size(new_size) ? T(1) : T(0); |
| 10370 | } |
| 10371 | |
| 10372 | void register_vector_view(exprtk::vector_view<T>& vec_view) |
| 10373 | { |
| 10374 | vector_map_[vec_view.data()] = &vec_view; |
| 10375 | } |
| 10376 | |
| 10377 | private: |
| 10378 | |
| 10379 | map_t vector_map_; |
| 10380 | }; |
| 10381 | |
| 10382 | |
| 10383 | template <typename T> |
nothing calls this directly
no outgoing calls
no test coverage detected