sanisizer
Sanitize sizes to avoid integer overflow
Loading...
Searching...
No Matches
create.hpp
Go to the documentation of this file.
1#ifndef SANISIZER_CREATE_HPP
2#define SANISIZER_CREATE_HPP
3
4#include <utility>
5
6#include "utils.hpp"
7#include "cast.hpp"
8
14namespace sanisizer {
15
27template<typename Container_, typename Value_>
28constexpr auto as_size_type(Value_ x) {
29 return cast<I<decltype(std::declval<Container_>().size())> >(x);
30}
31
45template<class Container_, typename Value_, typename ... Args_>
46Container_ create(Value_ x, Args_&&... args) {
47 return Container_(as_size_type<Container_>(x), std::forward<Args_>(args)...);
48}
49
63template<class Container_, typename Value_, typename ... Args_>
64void resize(Container_& container, Value_ x, Args_&&... args) {
65 container.resize(as_size_type<Container_>(x), std::forward<Args_>(args)...);
66}
67
81template<class Container_, typename Value_, typename ... Args_>
82void reserve(Container_& container, Value_ x, Args_&&... args) {
83 container.reserve(as_size_type<Container_>(x), std::forward<Args_>(args)...);
84}
85
86}
87
88#endif
Safe casts of integer size.
Sanitize sizes to avoid integer overflow.
Definition arithmetic.hpp:16
Container_ create(Value_ x, Args_ &&... args)
Definition create.hpp:46
constexpr auto as_size_type(Value_ x)
Definition create.hpp:28
void reserve(Container_ &container, Value_ x, Args_ &&... args)
Definition create.hpp:82
void resize(Container_ &container, Value_ x, Args_ &&... args)
Definition create.hpp:64
constexpr Dest_ cast(Value_ x)
Definition cast.hpp:46