[libc++][NFC] Remove duplication of distance_apriori_sentinel

This commit is contained in:
Louis Dionne 2022-01-13 12:22:48 -05:00
parent 1e04923d21
commit c7aa8b2962
4 changed files with 43 additions and 72 deletions

View File

@ -18,33 +18,10 @@
#include <climits> #include <climits>
#include "test_iterators.h" #include "test_iterators.h"
#include "../types.h"
using range_t = std::array<int, 10>; using range_t = std::array<int, 10>;
class distance_apriori_sentinel {
public:
distance_apriori_sentinel() = default;
constexpr explicit distance_apriori_sentinel(std::ptrdiff_t const count) : count_(count) {}
constexpr bool operator==(std::input_or_output_iterator auto const&) const {
assert(false && "difference op should take precedence");
return false;
}
friend constexpr std::ptrdiff_t operator-(std::input_or_output_iterator auto const&,
distance_apriori_sentinel const y) {
return -y.count_;
}
friend constexpr std::ptrdiff_t operator-(distance_apriori_sentinel const x,
std::input_or_output_iterator auto const&) {
return x.count_;
}
private:
std::ptrdiff_t count_ = 0;
};
struct expected_t { struct expected_t {
range_t::const_iterator coordinate; range_t::const_iterator coordinate;
std::ptrdiff_t result; std::ptrdiff_t result;

View File

@ -18,33 +18,10 @@
#include <cstddef> #include <cstddef>
#include "test_iterators.h" #include "test_iterators.h"
#include "../types.h"
using range_t = std::array<int, 10>; using range_t = std::array<int, 10>;
class distance_apriori_sentinel {
public:
distance_apriori_sentinel() = default;
constexpr explicit distance_apriori_sentinel(std::ptrdiff_t const count) : count_(count) {}
constexpr bool operator==(std::input_or_output_iterator auto const&) const {
assert(false && "difference op should take precedence");
return false;
}
friend constexpr std::ptrdiff_t operator-(std::input_or_output_iterator auto const&,
distance_apriori_sentinel const y) {
return -y.count_;
}
friend constexpr std::ptrdiff_t operator-(distance_apriori_sentinel const x,
std::input_or_output_iterator auto const&) {
return x.count_;
}
private:
std::ptrdiff_t count_ = 0;
};
template <class It, class Sent = It> template <class It, class Sent = It>
constexpr void check_assignable_case() { constexpr void check_assignable_case() {
auto range = range_t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; auto range = range_t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

View File

@ -18,6 +18,7 @@
#include <utility> #include <utility>
#include "test_iterators.h" #include "test_iterators.h"
#include "../types.h"
using range_t = std::array<int, 10>; using range_t = std::array<int, 10>;
@ -35,30 +36,6 @@ private:
decltype(base(std::declval<It>())) base_; decltype(base(std::declval<It>())) base_;
}; };
class distance_apriori_sentinel {
public:
distance_apriori_sentinel() = default;
constexpr explicit distance_apriori_sentinel(std::ptrdiff_t const count) : count_(count) {}
constexpr bool operator==(std::input_or_output_iterator auto const&) const {
assert(false && "difference op should take precedence");
return false;
}
friend constexpr std::ptrdiff_t operator-(std::input_or_output_iterator auto const&,
distance_apriori_sentinel const y) {
return -y.count_;
}
friend constexpr std::ptrdiff_t operator-(distance_apriori_sentinel const x,
std::input_or_output_iterator auto const&) {
return x.count_;
}
private:
std::ptrdiff_t count_ = 0;
};
template <bool Count, typename It> template <bool Count, typename It>
constexpr void check_assignable(int* it, int* last, int const* expected) { constexpr void check_assignable(int* it, int* last, int const* expected) {
{ {

View File

@ -0,0 +1,40 @@
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef TEST_STD_ITERATORS_ITERATOR_PRIMITIVES_RANGE_ITER_OPS_TYPES_H
#define TEST_STD_ITERATORS_ITERATOR_PRIMITIVES_RANGE_ITER_OPS_TYPES_H
#include <cassert>
#include <cstddef>
#include <iterator>
class distance_apriori_sentinel {
public:
distance_apriori_sentinel() = default;
constexpr explicit distance_apriori_sentinel(std::ptrdiff_t const count) : count_(count) {}
constexpr bool operator==(std::input_or_output_iterator auto const&) const {
assert(false && "difference op should take precedence");
return false;
}
friend constexpr std::ptrdiff_t operator-(std::input_or_output_iterator auto const&,
distance_apriori_sentinel const y) {
return -y.count_;
}
friend constexpr std::ptrdiff_t operator-(distance_apriori_sentinel const x,
std::input_or_output_iterator auto const&) {
return x.count_;
}
private:
std::ptrdiff_t count_ = 0;
};
#endif // TEST_STD_ITERATORS_ITERATOR_PRIMITIVES_RANGE_ITER_OPS_TYPES_H