30 #ifndef CORE_UTILS_STRINGUTIL_H
31 #define CORE_UTILS_STRINGUTIL_H 1
36 #include <boost/shared_ptr.hpp>
37 #include <boost/atomic.hpp>
49 raws.reserve(vec.size());
50 std::transform(vec.begin(), vec.end(), std::back_inserter(raws), [](boost::shared_ptr<T> ptr) {
return ptr.get(); });
65 std::istringstream stream(line);
66 std::vector<T> numbers((std::istream_iterator<T>(stream)), (std::istream_iterator<T>()));
71 template <
class T,
class Iter>
74 std::vector<boost::shared_ptr<T>> output;
75 std::transform(begin, end, std::back_inserter(output), [](
const typename Iter::value_type& p) {
return boost::dynamic_pointer_cast<T>(p); });
76 return std::move(output);
79 template <
class T,
class Cont>
82 return downcast_range<T>(container.begin(), container.end());
85 template <
class T,
class Iter>
86 std::vector<boost::shared_ptr<T>>
upcast_range(Iter begin, Iter end)
89 std::vector<boost::shared_ptr<T>> output;
90 std::transform(begin, end, std::back_inserter(output), [](
const typename Iter::value_type& p) {
return boost::static_pointer_cast<T>(p); });
91 return std::move(output);
94 template <
class T,
class Cont>
95 std::vector<boost::shared_ptr<T>>
upcast_range(
const Cont& container)
97 return upcast_range<T>(container.begin(), container.end());
102 int operator()()
const;
104 static boost::atomic<int> counter_;
112 std::ostream& operator<<(std::ostream& o, const std::vector<T>& vec)
115 std::copy(vec.begin(), vec.end(), std::ostream_iterator<T>(o,
" "));
std::string to_string(const T &t)
Definition: StringUtil.h:55
std::vector< boost::shared_ptr< T > > upcast_range(Iter begin, Iter end)
Definition: StringUtil.h:86
std::vector< boost::shared_ptr< T > > downcast_range(Iter begin, Iter end)
Definition: StringUtil.h:72
#define SCISHARE
Definition: share.h:39
Definition: StringUtil.h:100
std::vector< T * > toVectorOfRawPointers(const std::vector< boost::shared_ptr< T >> &vec)
Definition: StringUtil.h:46
std::vector< T > parseLineOfNumbers(const std::string &line)
Definition: StringUtil.h:63