1#ifndef TATAMI_SAFE_NON_NEGATIVE_EQUAL_HPP
2#define TATAMI_SAFE_NON_NEGATIVE_EQUAL_HPP
7#include "sanisizer/sanisizer.hpp"
14template<
typename Left_,
typename Right_>
15bool safe_non_negative_equal(Left_ l, Right_ r) {
16 return l >= 0 && r >= 0 && sanisizer::is_equal(l, r);
19template<
typename Container_,
typename Index_>
20Index_ can_cast_Index_to_container_size(Index_ x) {
24 typedef typename std::conditional<std::numeric_limits<std::size_t>::max() < std::numeric_limits<Index_>::max(), std::size_t, Index_>::type Intermediate;
25 sanisizer::can_cast<decltype(std::declval<Container_>().size())>(
static_cast<Intermediate
>(x));
29template<
typename Container_,
typename Index_>
30decltype(std::declval<Container_>().size()) cast_Index_to_container_size(Index_ x) {
31 return can_cast_Index_to_container_size<Container_>(x);
34template<
typename Container_,
typename Index_>
35Container_ create_container_of_Index_size(Index_ x) {
37 typedef typename std::conditional<std::numeric_limits<std::size_t>::max() < std::numeric_limits<Index_>::max(), std::size_t, Index_>::type Intermediate;
38 return sanisizer::create<Container_>(
static_cast<Intermediate
>(x));
41template<
typename Container_,
typename Index_>
42void resize_container_to_Index_size(Container_& container, Index_ x) {
43 container.resize(cast_Index_to_container_size<Container_>(x));
Flexible representations for matrix data.
Definition Extractor.hpp:15