36#include <initializer_list>
48#define FOAM_DEPRECATED(since) [[deprecated("Since " #since)]]
49#define FOAM_DEPRECATED_FOR(since, replacement) [[deprecated("Since " #since "; use " #replacement)]]
51#ifdef FOAM_COMPILE_STRICT
52# define FOAM_DEPRECATED_STRICT(since, replacement) [[deprecated("Since " #since "; use " #replacement)]]
53# if (FOAM_COMPILE_STRICT > 1)
54# define FOAM_DEPRECATED_STRICTER(since, replacement) [[deprecated("Since " #since "; use " #replacement)]]
58#ifndef FOAM_DEPRECATED_STRICT
59#define FOAM_DEPRECATED_STRICT(since, replacement)
61#ifndef FOAM_DEPRECATED_STRICTER
62#define FOAM_DEPRECATED_STRICTER(since, replacement)
66#if defined(__GNUC__) || defined(__clang__)
67# define FOAM_UNLIKELY(cond) __builtin_expect(!!(cond),0)
68# define FOAM_LIKELY(cond) __builtin_expect(!!(cond),1)
70# define FOAM_UNLIKELY(cond) (cond)
71# define FOAM_LIKELY(cond) (cond)
76#if defined(__GNUC__) && !defined(__llvm__)
77# define FOAM_REAL_GNUC __GNUC__
81#if (FOAM_REAL_GNUC >= 14)
82# define FOAM_NO_DANGLING_REFERENCE [[gnu::no_dangling]]
85#ifndef FOAM_NO_DANGLING_REFERENCE
86#define FOAM_NO_DANGLING_REFERENCE
112 return std::forward<T>(val);
119 return std::forward<T>(val);
140template<
class T,
size_t N>
143 for (
size_t i = 0; i <
N; ++i)
173 = std::is_same<bool, std::remove_cv_t<T>>::value;
178 = std::is_same<char, std::remove_cv_t<T>>::value;
194#define forAllIters(container,iter) \
197 auto iter = std::begin(container); \
198 iter != std::end(container); \
212#define forAllConstIters(container,iter) \
215 auto iter = std::cbegin(container); \
216 iter != std::cend(container); \
231#define forAllReverseIters(container,iter) \
234 auto iter = std::rbegin(container); \
235 iter != std::rend(container); \
249#define forAllConstReverseIters(container,iter) \
252 auto iter = std::crbegin(container); \
253 iter != std::crend(container); \
267#define forAll(list, i) \
268 for (Foam::label i=0; i<(list).size(); ++i)
280#define forAllReverse(list, i) \
281 for (Foam::label i=(list).size()-1; i>=0; --i)
296#define forAllIter(Container,container,iter) \
299 Container::iterator iter = (container).begin(); \
300 iter != (container).end(); \
315#define forAllConstIter(Container,container,iter) \
318 Container::const_iterator iter = (container).cbegin(); \
319 iter != (container).cend(); \
364 span(
const span& other)
noexcept =
default;
373 constexpr span() noexcept
395 ~span() noexcept = default;
406 constexpr iterator end() const noexcept {
return (data_ + size_); }
415 constexpr reference back()
const {
return *(data_ + size_ - 1); }
420 return *(data_ + idx);
424 constexpr pointer data() const noexcept {
return data_; }
435 return (size_*
sizeof(Type));
439 constexpr bool empty() const noexcept {
return !size_; }
453 return span<Type>(data_ + (size_ - count), count);
466 return span<Type>(data_ + pos, std::min(size_ - pos, len));
476 return reinterpret_cast<const char*
>(data_);
484 class = std::enable_if_t<!std::is_const_v<TypeT>>
488 return reinterpret_cast<char*
>(data_);
graph_traits< Graph >::vertices_size_type size_type
Rudimentary functionality similar to std::span for holding memory view.
constexpr reference back() const
Access the last element. Undefined if span is empty.
constexpr span() noexcept
Default construct.
constexpr const char * cdata_bytes() const noexcept
A readonly view as byte content.
constexpr size_type size_bytes() const noexcept
The size of the sequence in bytes.
constexpr reference operator[](size_type idx) const
Access an element of the sequence.
constexpr size_type size() const noexcept
Number of elements in the sequence.
constexpr iterator end() const noexcept
Iterator to one-past end of span.
constexpr span(pointer ptr, size_type count) noexcept
Construct from pointer and size.
constexpr span(pointer first, pointer last) noexcept
Construct from begin/end pointers.
span< Type > last(size_type count) const noexcept
Obtains a span of the last count elements.
~span() noexcept=default
Destructor.
constexpr pointer data() const noexcept
Return a pointer to the beginning of the sequence.
span & operator=(const span &other) noexcept=default
Copy assignment.
std::remove_cv_t< Type > value_type
std::ptrdiff_t difference_type
span(const span &other) noexcept=default
Copy construct.
char * data_bytes() const noexcept
A writable view as byte content (if the pointer type is non-const). Like data(), the access itself is...
constexpr reference front() const
Access the first element. Undefined if span is empty.
span< Type > first(size_type count) const noexcept
Obtains a span of the first count elements.
span< Type > subspan(size_type pos, size_type len) const noexcept
Obtains a sub-span of length len starting at pos.
span< Type > subspan(size_type pos) const noexcept
Obtains a sub-span starting at pos until end of the sequence.
constexpr iterator begin() const noexcept
Iterator to begin of span.
const element_type & const_reference
constexpr bool empty() const noexcept
True if the sequence is empty.
const Type * const_pointer
Additional OpenFOAM modules.
void Swap(DynamicList< T, SizeMinA > &a, DynamicList< T, SizeMinB > &b)
Exchange contents of lists - see DynamicList::swap().
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
Namespace for std templates that are are part of future C++ standards or that are in a state of chang...
constexpr bool is_bool_v
Test for bool type (after removing cv).
constexpr bool dependent_false_v
Map any dependent type to false (workaround before CWG2518).
constexpr bool is_char_v
Test for char type (after removing cv).
A functor that returns its argument unchanged (cf. C++20 std::identity) Should never be specialized.
constexpr T && operator[](T &&val) const noexcept
constexpr T && operator()(T &&val) const noexcept
const Vector< label > N(dict.get< Vector< label > >("N"))