19 #ifndef INCLUDED_CSPAINT_UTIL_H
20 #define INCLUDED_CSPAINT_UTIL_H
23 #include <type_traits>
35 template <
typename... Args>
36 static std::shared_ptr<T>
create(Args &&... args)
38 auto ptr = std::make_shared<T>(std::forward<Args>(args)...);
49 template <
typename T,
typename Func>
52 std::vector<std::invoke_result_t<Func, T>>
map_vector(
const std::vector<T> &input, Func f)
54 std::vector<std::invoke_result_t<Func, T>> newData;
55 newData.reserve(input.size());
56 for (
auto &item : input) {
57 newData.push_back(f(item));
63 template <
typename T,
typename Func>
66 input.erase(std::remove_if(input.begin(), input.end(), [&f](
const T &data) {
return !f(data); }),
74 return !std::is_move_constructible_v<T> && !std::is_copy_constructible_v<T> &&
75 !std::is_move_assignable_v<T> && !std::is_copy_assignable_v<T> &&
76 !std::is_constructible_v<T>;
constexpr bool nomove_nocopy_nodefault()
Definition: cspaint_util.h:72
std::vector< T > filter_vector(std::vector< T > input, Func f)
Definition: cspaint_util.h:64
std::vector< std::invoke_result_t< Func, T > > map_vector(const std::vector< T > &input, Func f)
Definition: cspaint_util.h:52
static std::shared_ptr< T > create(Args &&...args)
Definition: cspaint_util.h:36
Definition: cspaint_util.h:32
Definition: cspaint_buffer.h:26