Skip to content

Commit b423c11

Browse files
committed
remove assert facility
1 parent 5f79282 commit b423c11

File tree

1 file changed

+15
-49
lines changed

1 file changed

+15
-49
lines changed

include/beman/inplace_vector/inplace_vector.hpp

Lines changed: 15 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -268,27 +268,8 @@ Software.
268268
#include <stdexcept> // for length_error
269269
#include <type_traits> // for aligned_storage and all meta-functions
270270

271-
// Optimizer allowed to assume that EXPR evaluates to true
272-
#define __IV_ASSUME(__EXPR) \
273-
static_cast<void>((__EXPR) ? void(0) : builtin_unreachable)
274-
275-
// Assert pretty printer
276-
#define __IV_ASSERT(...) \
277-
static_cast<void>((__VA_ARGS__) \
278-
? void(0) \
279-
: ::beman::details::inplace_vector::__assert_failure( \
280-
static_cast<const char *>(__FILE__), __LINE__, \
281-
"assertion failed: " #__VA_ARGS__))
282-
283-
// Assert in debug, assume in release.
284-
// #ifdef NDEBUG
285-
// #define __IV_EXPECT(__EXPR) __IV_ASSUME(__EXPR)
286-
// #else
287-
// #define __IV_EXPECT(__EXPR) __IV_ASSERT(__EXPR)
288-
// #endif
289-
290-
// TODO River: Disabled temporarily
291-
#define __IV_EXPECT(__EXPR)
271+
// Artifact from previous implementation, can be used as hints for optimizer
272+
#define IV_EXPECT(EXPR)
292273

293274
// beman::from_range_t
294275
namespace beman {
@@ -299,18 +280,6 @@ inline constexpr from_range_t from_range;
299280
// Private utilities
300281
namespace beman::details::inplace_vector {
301282

302-
template <class = void>
303-
[[noreturn]]
304-
static constexpr void __assert_failure(char const *file, int __line,
305-
char const *__msg) {
306-
if (std::is_constant_evaluated()) {
307-
throw __msg; // TODO: std lib implementer, do better here
308-
} else {
309-
std::fprintf(stderr, "%s(%d): %s\n", file, __line, __msg);
310-
std::abort();
311-
}
312-
}
313-
314283
using namespace beman::details::inplace_vector;
315284

316285
// clang-format off
@@ -329,7 +298,7 @@ template <std::ranges::random_access_range Rng, std::integral Index>
329298
static constexpr decltype(auto) index(Rng &&rng, Index i) noexcept
330299
requires(std::ranges::sized_range<Rng>)
331300
{
332-
__IV_EXPECT(static_cast<ptrdiff_t>(i) < std::ranges::size(rng));
301+
IV_EXPECT(static_cast<ptrdiff_t>(i) < std::ranges::size(rng));
333302
return std::begin(std::forward<Rng>(rng))[std::forward<Index>(i)];
334303
}
335304

@@ -351,8 +320,8 @@ template <class T> struct zero_sized {
351320
static constexpr T *storage_data() noexcept { return nullptr; }
352321
static constexpr size_type storage_size() noexcept { return 0; }
353322
static constexpr void unsafe_set_size(size_t new_size) noexcept {
354-
__IV_EXPECT(new_size == 0 &&
355-
"tried to change size of empty storage to non-zero value");
323+
IV_EXPECT(new_size == 0 &&
324+
"tried to change size of empty storage to non-zero value");
356325
}
357326

358327
public:
@@ -388,7 +357,7 @@ template <class T, size_t N> struct trivial {
388357
constexpr T *storage_data() noexcept { return storage_data_.data(); }
389358
constexpr size_type storage_size() const noexcept { return storage_size_; }
390359
constexpr void unsafe_set_size(size_t new_size) noexcept {
391-
__IV_EXPECT(size_type(new_size) <= N && "new_size out-of-bounds [0, N]");
360+
IV_EXPECT(size_type(new_size) <= N && "new_size out-of-bounds [0, N]");
392361
storage_size_ = size_type(new_size);
393362
}
394363

@@ -404,11 +373,11 @@ template <class T, size_t N> struct trivial {
404373
template <class T, size_t N> struct raw_byte_based_storage {
405374
alignas(T) std::byte _d[sizeof(T) * N];
406375
constexpr T *storage_data(size_t i) noexcept {
407-
__IV_EXPECT(i < N);
376+
IV_EXPECT(i < N);
408377
return reinterpret_cast<T *>(_d) + i;
409378
}
410379
constexpr const T *storage_data(size_t i) const noexcept {
411-
__IV_EXPECT(i < N);
380+
IV_EXPECT(i < N);
412381
return reinterpret_cast<const T *>(_d) + i;
413382
}
414383
};
@@ -436,7 +405,7 @@ template <class T, size_t N> struct non_trivial {
436405
constexpr T *storage_data() noexcept { return storage_data_.storage_data(0); }
437406
constexpr size_type storage_size() const noexcept { return storage_size_; }
438407
constexpr void unsafe_set_size(size_t new_size) noexcept {
439-
__IV_EXPECT(size_type(new_size) <= N && "new_size out-of-bounds [0, N)");
408+
IV_EXPECT(size_type(new_size) <= N && "new_size out-of-bounds [0, N)");
440409
storage_size_ = size_type(new_size);
441410
}
442411

@@ -641,12 +610,12 @@ struct inplace_vector
641610

642611
private: // Utilities
643612
constexpr void assert_iterator_in_range(const_iterator it) noexcept {
644-
__IV_EXPECT(begin() <= it && "iterator not in range");
645-
__IV_EXPECT(it <= end() && "iterator not in range");
613+
IV_EXPECT(begin() <= it && "iterator not in range");
614+
IV_EXPECT(it <= end() && "iterator not in range");
646615
}
647616
constexpr void assert_valid_iterator_pair(const_iterator first,
648617
const_iterator last) noexcept {
649-
__IV_EXPECT(first <= last && "invalid iterator pair");
618+
IV_EXPECT(first <= last && "invalid iterator pair");
650619
}
651620
constexpr void assert_iterator_pair_in_range(const_iterator first,
652621
const_iterator last) noexcept {
@@ -673,7 +642,7 @@ struct inplace_vector
673642
constexpr T &unchecked_emplace_back(Args &&...args)
674643
requires(std::constructible_from<T, Args...>)
675644
{
676-
__IV_EXPECT(size() < capacity() && "inplace_vector out-of-memory");
645+
IV_EXPECT(size() < capacity() && "inplace_vector out-of-memory");
677646
std::construct_at(end(), std::forward<Args>(args)...);
678647
unsafe_set_size(size() + size_type(1));
679648
return back();
@@ -918,7 +887,7 @@ struct inplace_vector
918887
}
919888

920889
constexpr void pop_back() {
921-
__IV_EXPECT(size() > 0 && "pop_back from empty inplace_vector!");
890+
IV_EXPECT(size() > 0 && "pop_back from empty inplace_vector!");
922891
unsafe_destroy(end() - 1, end());
923892
unsafe_set_size(size() - 1);
924893
}
@@ -1052,7 +1021,4 @@ struct inplace_vector
10521021

10531022
} // namespace beman
10541023

1055-
// undefine all the internal macros
1056-
#undef __IV_ASSUME
1057-
#undef __IV_ASSERT
1058-
#undef __IV_EXPECT
1024+
#undef IV_EXPECT

0 commit comments

Comments
 (0)