uTL
micro Template library

STL's core language concepts. More...

Namespaces

 _1wire_i_det
 
 common_impl
 
 detail
 
 details
 
 i2c_i_details
 
 idx_dev_details
 
 idxdev_it_details
 
 in_dev_details
 
 inbuf_dev_details
 
 indev_it_details
 
 meta
 
 out_dev_details
 
 outdev_it_details
 
 spi
 Abstract base class for spi bus.
 
 spi_i_details
 

Classes

class  _1wire_i
 Template base class for 1-wire communication interface using CRTP. More...
 
class  _1wire_i< virtual_tag >
 A virtual base class implementation. More...
 
class  _1wire_id_t
 
class  _1wire_uart_i
 1-wire UART interface template class using CRTP Using the private virtual interface we provide the interface from _1wire_i<> More...
 
class  _1wire_uart_i< virtual_tag >
 A virtual base class interface implementation. Using the private virtual interface we provide the interface from _1wire_i<virtual_tag> More...
 
struct  array
 A standard container for storing a fixed size sequence of elements. More...
 
struct  array_traits
 array container traits helper More...
 
struct  array_traits< _Tp, 0 >
 
struct  bidirectional_iterator_tag
 
struct  contiguous_iterator_tag
 
struct  crtp_tag
 CRTP support tag type. More...
 
struct  dev_iterator_traits
 Device iterator collection. More...
 
struct  forward_iterator_tag
 
class  i2c_bb_i
 A bit banking implementation of i2c bus inherited from i2c_i base class. More...
 
class  i2c_bb_i< virtual_tag >
 A virtual base class interface specialization. Using the private virtual interface we provide the interface from i2c_i<virtual_tag> More...
 
class  i2c_i
 Abstract base class for i2c bus. More...
 
class  i2c_i< virtual_tag >
 A virtual base class specialization. More...
 
struct  id_t
 A standard container for storing IDs as a fixed size sequence of bytes. This type is based on etl::array Meets the requirements of: container, reversible container, sequence. Sets support random access iterators. More...
 
struct  id_traits
 id container traits helper More...
 
struct  id_traits< _Tp, 0 >
 
class  idx_dev
 Abstract base class for indexed devices. More...
 
class  idx_dev< virtual_tag, data_t, idx_t, N >
 A virtual base class specialization. More...
 
class  in_dev
 Abstract base class for input devices. More...
 
class  in_dev< virtual_tag, data_t, streamsize >
 A virtual base class specialization. More...
 
class  inbuf_dev
 Abstract base class for input buffered devices. More...
 
class  inbuf_dev< virtual_tag, data_t, streamsize >
 A virtual base class specialization. More...
 
class  indev_it
 Input device iterator type. We "future call" interface methods from owner class to provide iterator functionality. More...
 
struct  input_iterator_tag
 
class  iodev_it
 Indexed device iterator type. We "future call" interface methods from owner class to provide iterator functionality. More...
 
struct  is_invocable
 std::is_invocable trait for C++11 More...
 
struct  is_invocable_r
 std::is_invocable_r trait for C++11 More...
 
class  istreamdev_it
 
class  ostream_dev
 Abstract base classes for output stream devices. More...
 
class  ostream_dev< virtual_tag, data_t >
 
class  ostreamdev_it
 
class  out_dev
 Abstract base classes for output devices. More...
 
class  out_dev< virtual_tag, data_t, streamsize >
 A virtual base class specialization. More...
 
class  outdev_it
 Output device iterator type. We "future call" interface methods from owner class to provide iterator functionality. More...
 
struct  output_iterator_tag
 Iterator tags [std.iterator.tags] Extension: contiguous_iterator_tag for denoting contiguous iterators. More...
 
struct  random_access_iterator_tag
 
class  spi_bb_i
 A bit banking implementation of spi bus inherited from spi_i base class. More...
 
class  spi_bb_i< virtual_tag, CPOL, CPHA, BitOrder >
 A virtual base class interface specialization. Using the private virtual interface we provide the interface from spi_i<virtual_tag> More...
 
class  spi_i
 
class  spi_i< virtual_tag >
 A virtual base class implementation. More...
 
struct  virtual_tag
 virtual support tag type More...
 

Typedefs

template<typename T >
using remove_cvref_t = std::remove_cv_t< std::remove_reference_t< T > >
 
template<typename T >
using cref_ = const std::remove_reference_t< T > &
 
template<typename T >
using _ref_t = std::add_lvalue_reference_t< T >
 
template<typename _T1 , typename _T2 , typename _Ret = _T1>
using use_if_same_t = meta::eval< meta::enable_if< meta::same_< _T1, _T2 >::value, _Ret > >
 
template<typename... Ts>
using common_reference = common_impl::common_reference< Ts... >
 
template<typename... Ts>
using common_reference_t = meta::eval< common_reference< Ts... > >
 
byte and word types
using byte_t = uint8_t
 8 bits wide More...
 
using word_t = uint16_t
 16 bits wide More...
 
using dword_t = uint32_t
 
size and index
using size_t = std::size_t
 
using index_t = size_t
 index_t and size_t mend to be interchangeable More...
 
using ptrdiff_t = std::ptrdiff_t
 
template<typename _Callable , typename... _Args>
using invoke_result = detail::invoke_result_< is_invocable< _Callable, _Args... >::value, _Callable, _Args... >
 invoke_result (for C++14) More...
 
template<typename _Callable , typename... _Args>
using invoke_result_t = meta::eval< invoke_result< _Callable, _Args... > >
 invoke_result_t (for C++14) More...
 

Functions

template<typename _Tp , size_t _Nm>
void swap (array< _Tp, _Nm > &lhs, array< _Tp, _Nm > &rhs) noexcept(noexcept(lhs.swap(rhs)))
 
template<size_t _Int, typename _Tp , size_t _Nm>
constexpr _Tp & get (array< _Tp, _Nm > &arr) noexcept
 
template<size_t _Int, typename _Tp , size_t _Nm>
constexpr _Tp && get (array< _Tp, _Nm > &&arr) noexcept
 
template<size_t _Int, typename _Tp , size_t _Nm>
constexpr const _Tp & get (const array< _Tp, _Nm > &arr) noexcept
 
template<typename _Callable , typename... _Args>
decltype(auto) invoke (_Callable &&fn, _Args &&... args)
 Invoke a callable object (for C++14) More...
 
Array comparisons.
template<typename _Tp , size_t _Nm>
bool operator== (const array< _Tp, _Nm > &lhs, const array< _Tp, _Nm > &rhs)
 
template<typename _Tp , size_t _Nm>
bool operator!= (const array< _Tp, _Nm > &lhs, const array< _Tp, _Nm > &rhs)
 
template<typename _Tp , size_t _Nm>
bool operator< (const array< _Tp, _Nm > &lhs, const array< _Tp, _Nm > &rhs)
 
template<typename _Tp , size_t _Nm>
bool operator> (const array< _Tp, _Nm > &lhs, const array< _Tp, _Nm > &rhs)
 
template<typename _Tp , size_t _Nm>
bool operator<= (const array< _Tp, _Nm > &lhs, const array< _Tp, _Nm > &rhs)
 
template<typename _Tp , size_t _Nm>
bool operator>= (const array< _Tp, _Nm > &lhs, const array< _Tp, _Nm > &rhs)
 
device ID comparisons.
template<typename _Tp , size_t _Nm>
bool operator== (const id_t< _Tp, _Nm > &lhs, const id_t< _Tp, _Nm > &rhs)
 
template<typename _Tp , size_t _Nm>
bool operator!= (const id_t< _Tp, _Nm > &lhs, const id_t< _Tp, _Nm > &rhs)
 
template<typename _Tp , size_t _Nm>
bool operator< (const id_t< _Tp, _Nm > &lhs, const id_t< _Tp, _Nm > &rhs)
 
template<typename _Tp , size_t _Nm>
bool operator> (const id_t< _Tp, _Nm > &lhs, const id_t< _Tp, _Nm > &rhs)
 
template<typename _Tp , size_t _Nm>
bool operator<= (const id_t< _Tp, _Nm > &lhs, const id_t< _Tp, _Nm > &rhs)
 
template<typename _Tp , size_t _Nm>
bool operator>= (const id_t< _Tp, _Nm > &lhs, const id_t< _Tp, _Nm > &rhs)
 
template<typename _C1 , typename _D1 , typename _C2 , typename _D2 >
bool operator== (const istreamdev_it< _C1, _D1 > &lhs, const istreamdev_it< _C2, _D2 > &rhs) noexcept
 Equality comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid. More...
 
template<typename _C1 , typename _D1 , typename _C2 , typename _D2 >
bool operator!= (const istreamdev_it< _C1, _D1 > &lhs, const istreamdev_it< _C2, _D2 > &rhs) noexcept
 
template<typename _Cont1 , typename _It1 , index_t _beg1, index_t _end1, typename _Cont2 , typename _It2 , index_t _beg2, index_t _end2>
bool operator== (const outdev_it< _Cont1, _It1, _beg1, _end1 > &lhs, const outdev_it< _Cont2, _It2, _beg2, _end2 > &rhs) noexcept
 Equality comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid. More...
 
template<typename _Cont1 , typename _It1 , index_t _beg1, index_t _end1, typename _Cont2 , typename _It2 , index_t _beg2, index_t _end2>
bool operator!= (const outdev_it< _Cont1, _It1, _beg1, _end1 > &lhs, const outdev_it< _Cont2, _It2, _beg2, _end2 > &rhs) noexcept
 Inequality comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid. More...
 
indev_it EqualityComparable && LessThanComparable requirements

comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool operator== (const indev_it< _Cont1, _It1, _beg1, _size1 > &x, const indev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
 
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool operator< (const indev_it< _Cont1, _It1, _beg1, _size1 > &x, const indev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
 Less than. More...
 
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool operator!= (const indev_it< _Cont1, _It1, _beg1, _size1 > &x, const indev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
 
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool operator<= (const indev_it< _Cont1, _It1, _beg1, _size1 > &x, const indev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
 
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool operator> (const indev_it< _Cont1, _It1, _beg1, _size1 > &x, const indev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
 
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool operator>= (const indev_it< _Cont1, _It1, _beg1, _size1 > &x, const indev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
 
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool operator== (const iodev_it< _Cont1, _It1, _beg1, _size1 > &x, const iodev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
 
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool operator< (const iodev_it< _Cont1, _It1, _beg1, _size1 > &x, const iodev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
 Less than. More...
 
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool operator!= (const iodev_it< _Cont1, _It1, _beg1, _size1 > &x, const iodev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
 
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool operator<= (const iodev_it< _Cont1, _It1, _beg1, _size1 > &x, const iodev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
 
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool operator> (const iodev_it< _Cont1, _It1, _beg1, _size1 > &x, const iodev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
 
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool operator>= (const iodev_it< _Cont1, _It1, _beg1, _size1 > &x, const iodev_it< _Cont2, _It2, _beg2, _size2 > &y) noexcept
 
iterator arithmetic
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
auto operator- (indev_it< _Cont1, _It1, _beg1, _size1 > &x, indev_it< _Cont1, _It1, _beg1, _size1 > &y) noexcept -> decltype(x.cursor() - y.cursor())
 
template<typename _Cont , typename _It , index_t _beg, size_t _size>
indev_it< _Cont, _It, _beg, _size > operator+ (typename _Cont::difference_type n, indev_it< _Cont, _It, _beg, _size > &it) noexcept
 
template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
auto operator- (iodev_it< _Cont1, _It1, _beg1, _size1 > &x, iodev_it< _Cont1, _It1, _beg1, _size1 > &y) noexcept -> decltype(x.cursor() - y.cursor())
 
template<typename _Cont , typename _It , index_t _beg, size_t _size>
iodev_it< _Cont, _It, _beg, _size > operator+ (typename _Cont::difference_type n, iodev_it< _Cont, _It, _beg, _size > &it) noexcept
 

Variables

template<class I >
_utlConcept WeaklyIncrementable
 
template<class T , class U >
_utlConcept Same = meta::same_<T, U>::value
 
template<class Derived , class Base >
_utlConcept DerivedFrom
 
template<class From , class To >
_utlConcept ConvertibleTo = std::is_convertible<From, To>::value
 
template<class T , class U >
_utlConcept CommonReference
 
template<class T , class U >
_utlConcept Common
 
template<class T >
_utlConcept Integral = std::is_integral<T>::value
 
template<class T >
_utlConcept SignedIntegral = Integral<T> && std::is_signed<T>::value
 
template<class T >
_utlConcept UnsignedIntegral = Integral<T> && !std::is_signed<T>::value
 
template<typename T >
_utlConcept MoveAssignable = std::is_move_assignable<T>::value
 
template<typename T >
_utlConcept CopyAssignable = std::is_copy_assignable<T>::value
 
template<class LHS , class RHS >
_utlConcept Assignable
 
template<class T >
_utlConcept Destructible = std::is_nothrow_destructible<T>::value
 
template<class T , class... Args>
_utlConcept Constructible
 
template<class T >
_utlConcept DefaultConstructible = Constructible<T>
 
template<class T >
_utlConcept MoveConstructible
 
template<class T >
_utlConcept CopyConstructible
 
template<class T >
_utlConcept Movable
 
template<class T >
_utlConcept Copyable
 
template<class B >
_utlConcept Boolean
 
template<class T , class U >
_utlConcept WeaklyEqualityComparableWith
 
template<class T >
_utlConcept EqualityComparable = WeaklyEqualityComparableWith<T, T>
 
template<class T , class U >
_utlConcept EqualityComparableWith
 
template<class T >
_utlConcept StrictTotallyOrdered
 
template<class T , class U >
_utlConcept StrictTotallyOrderedWith
 
template<class T >
_utlConcept Semiregular = Copyable<T> && DefaultConstructible<T>
 
template<class T >
_utlConcept Regular = Semiregular<T> && EqualityComparable<T>
 
template<class T >
_utlConcept Scalar
 
template<class T >
_utlConcept Arithmetic
 
template<class T >
_utlConcept FloatingPoint
 
template<class F , class... Args>
_utlConcept Invocable = is_invocable<F, Args...>::value
 
template<class F , class... Args>
_utlConcept RegularInvocable = Invocable<F, Args...>
 
template<class F , class... Args>
_utlConcept Predicate
 
template<class R , class T , class U >
_utlConcept Relation
 
template<class R , class T , class U >
_utlConcept StrictWeakOrder = Relation<R, T, U>
 
template<typename _Tp >
constexpr bool Idx_dev = idx_dev_details::is_idx_dev_ <_Tp>::value
 
template<typename _Tp >
constexpr bool In_dev = in_dev_details::is_in_dev_ <_Tp>::value
 
template<typename _Tp >
constexpr bool Inbuf_dev = inbuf_dev_details::is_inbuf_dev_ <_Tp>::value
 
template<typename _Tp >
constexpr bool Out_dev = out_dev_details::is_out_dev_<_Tp>::value
 
using is_swappable = std::is_swappable
 
using is_swappable_with = std::is_swappable_with
 
template<class T , class U >
_utlConcept SwappableWith
 
template<class T >
_utlConcept Swappable = is_swappable_with<T, T>::type::value
 

Detailed Description

STL's core language concepts.

We provide std concepts in case host's stl does not provide them yet.

For more information

See also
https://en.cppreference.com/w/cpp/concepts

Typedef Documentation

◆ _ref_t

template<typename T >
using utl::_ref_t = typedef std::add_lvalue_reference_t<T>

Definition at line 48 of file stl.h.

◆ byte_t

using utl::byte_t = typedef uint8_t

8 bits wide

Definition at line 31 of file types.h.

◆ common_reference

template<typename... Ts>
using utl::common_reference = typedef common_impl::common_reference<Ts...>

Definition at line 281 of file stl.h.

◆ common_reference_t

template<typename... Ts>
using utl::common_reference_t = typedef meta::eval< common_reference<Ts...> >

Definition at line 286 of file stl.h.

◆ cref_

template<typename T >
using utl::cref_ = typedef const std::remove_reference_t<T>&

Definition at line 45 of file stl.h.

◆ dword_t

using utl::dword_t = typedef uint32_t

32 bits wide

Definition at line 33 of file types.h.

◆ index_t

using utl::index_t = typedef size_t

index_t and size_t mend to be interchangeable

Examples:
W:/Work/Software/Libraries/utl/include/utl/meta/typelist.h.

Definition at line 38 of file types.h.

◆ invoke_result

template<typename _Callable , typename... _Args>
using utl::invoke_result = typedef detail::invoke_result_< is_invocable<_Callable, _Args...>::value, _Callable, _Args... >

invoke_result (for C++14)

Definition at line 174 of file invoke.h.

◆ invoke_result_t

template<typename _Callable , typename... _Args>
using utl::invoke_result_t = typedef meta::eval < invoke_result<_Callable, _Args...> >

invoke_result_t (for C++14)

Definition at line 180 of file invoke.h.

◆ is_swappable

using utl::is_swappable = typedef std::is_swappable

Swappable, SwappableWith

Definition at line 407 of file stl.h.

◆ is_swappable_with

using utl::is_swappable_with = typedef std::is_swappable_with

Definition at line 408 of file stl.h.

◆ ptrdiff_t

using utl::ptrdiff_t = typedef std::ptrdiff_t

Definition at line 40 of file types.h.

◆ remove_cvref_t

template<typename T >
using utl::remove_cvref_t = typedef std::remove_cv_t< std::remove_reference_t<T> >

Definition at line 42 of file stl.h.

◆ size_t

using utl::size_t = typedef std::size_t

Definition at line 37 of file types.h.

◆ use_if_same_t

template<typename _T1 , typename _T2 , typename _Ret = _T1>
using utl::use_if_same_t = typedef meta::eval< meta::enable_if< meta::same_<_T1, _T2>::value, _Ret > >

Definition at line 55 of file stl.h.

◆ word_t

using utl::word_t = typedef uint16_t

16 bits wide

Definition at line 32 of file types.h.

Function Documentation

◆ get() [1/3]

template<size_t _Int, typename _Tp , size_t _Nm>
constexpr _Tp& utl::get ( array< _Tp, _Nm > &  arr)
noexcept

Definition at line 220 of file array.h.

◆ get() [2/3]

template<size_t _Int, typename _Tp , size_t _Nm>
constexpr _Tp&& utl::get ( array< _Tp, _Nm > &&  arr)
noexcept

Definition at line 226 of file array.h.

◆ get() [3/3]

template<size_t _Int, typename _Tp , size_t _Nm>
constexpr const _Tp& utl::get ( const array< _Tp, _Nm > &  arr)
noexcept

Definition at line 232 of file array.h.

◆ invoke()

template<typename _Callable , typename... _Args>
decltype(auto) utl::invoke ( _Callable &&  fn,
_Args &&...  args 
)
inline

Invoke a callable object (for C++14)

Definition at line 121 of file invoke.h.

◆ operator!=() [1/6]

template<typename _Tp , size_t _Nm>
bool utl::operator!= ( const array< _Tp, _Nm > &  lhs,
const array< _Tp, _Nm > &  rhs 
)
inline

Definition at line 186 of file array.h.

◆ operator!=() [2/6]

template<typename _Tp , size_t _Nm>
bool utl::operator!= ( const id_t< _Tp, _Nm > &  lhs,
const id_t< _Tp, _Nm > &  rhs 
)
inline

Definition at line 206 of file id.h.

◆ operator!=() [3/6]

template<typename _C1 , typename _D1 , typename _C2 , typename _D2 >
bool utl::operator!= ( const istreamdev_it< _C1, _D1 > &  lhs,
const istreamdev_it< _C2, _D2 > &  rhs 
)
inlinenoexcept

Definition at line 236 of file dev_iterators.h.

◆ operator!=() [4/6]

template<typename _Cont1 , typename _It1 , index_t _beg1, index_t _end1, typename _Cont2 , typename _It2 , index_t _beg2, index_t _end2>
bool utl::operator!= ( const outdev_it< _Cont1, _It1, _beg1, _end1 > &  lhs,
const outdev_it< _Cont2, _It2, _beg2, _end2 > &  rhs 
)
inlinenoexcept

Inequality comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid.

Parameters
lhsLeft hand site iterator
rhsRight hand site iterator
Returns
True in inequality

Definition at line 382 of file dev_iterators.h.

◆ operator!=() [5/6]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool utl::operator!= ( const indev_it< _Cont1, _It1, _beg1, _size1 > &  x,
const indev_it< _Cont2, _It2, _beg2, _size2 > &  y 
)
inlinenoexcept

Definition at line 624 of file dev_iterators.h.

◆ operator!=() [6/6]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool utl::operator!= ( const iodev_it< _Cont1, _It1, _beg1, _size1 > &  x,
const iodev_it< _Cont2, _It2, _beg2, _size2 > &  y 
)
inlinenoexcept

Definition at line 909 of file dev_iterators.h.

◆ operator+() [1/2]

template<typename _Cont , typename _It , index_t _beg, size_t _size>
indev_it<_Cont, _It, _beg, _size> utl::operator+ ( typename _Cont::difference_type  n,
indev_it< _Cont, _It, _beg, _size > &  it 
)
inlinenoexcept

Definition at line 659 of file dev_iterators.h.

◆ operator+() [2/2]

template<typename _Cont , typename _It , index_t _beg, size_t _size>
iodev_it<_Cont, _It, _beg, _size> utl::operator+ ( typename _Cont::difference_type  n,
iodev_it< _Cont, _It, _beg, _size > &  it 
)
inlinenoexcept

Definition at line 944 of file dev_iterators.h.

◆ operator-() [1/2]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
auto utl::operator- ( indev_it< _Cont1, _It1, _beg1, _size1 > &  x,
indev_it< _Cont1, _It1, _beg1, _size1 > &  y 
) -> decltype (x.cursor() - y.cursor())
inlinenoexcept

Definition at line 651 of file dev_iterators.h.

◆ operator-() [2/2]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
auto utl::operator- ( iodev_it< _Cont1, _It1, _beg1, _size1 > &  x,
iodev_it< _Cont1, _It1, _beg1, _size1 > &  y 
) -> decltype (x.cursor() - y.cursor())
inlinenoexcept

Definition at line 936 of file dev_iterators.h.

◆ operator<() [1/4]

template<typename _Tp , size_t _Nm>
bool utl::operator< ( const array< _Tp, _Nm > &  lhs,
const array< _Tp, _Nm > &  rhs 
)
inline

Definition at line 191 of file array.h.

◆ operator<() [2/4]

template<typename _Tp , size_t _Nm>
bool utl::operator< ( const id_t< _Tp, _Nm > &  lhs,
const id_t< _Tp, _Nm > &  rhs 
)
inline

Definition at line 211 of file id.h.

◆ operator<() [3/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool utl::operator< ( const indev_it< _Cont1, _It1, _beg1, _size1 > &  x,
const indev_it< _Cont2, _It2, _beg2, _size2 > &  y 
)
inlinenoexcept

Less than.

Definition at line 616 of file dev_iterators.h.

◆ operator<() [4/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool utl::operator< ( const iodev_it< _Cont1, _It1, _beg1, _size1 > &  x,
const iodev_it< _Cont2, _It2, _beg2, _size2 > &  y 
)
inlinenoexcept

Less than.

Definition at line 901 of file dev_iterators.h.

◆ operator<=() [1/4]

template<typename _Tp , size_t _Nm>
bool utl::operator<= ( const array< _Tp, _Nm > &  lhs,
const array< _Tp, _Nm > &  rhs 
)
inline

Definition at line 201 of file array.h.

◆ operator<=() [2/4]

template<typename _Tp , size_t _Nm>
bool utl::operator<= ( const id_t< _Tp, _Nm > &  lhs,
const id_t< _Tp, _Nm > &  rhs 
)
inline

Definition at line 222 of file id.h.

◆ operator<=() [3/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool utl::operator<= ( const indev_it< _Cont1, _It1, _beg1, _size1 > &  x,
const indev_it< _Cont2, _It2, _beg2, _size2 > &  y 
)
inlinenoexcept

Definition at line 630 of file dev_iterators.h.

◆ operator<=() [4/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool utl::operator<= ( const iodev_it< _Cont1, _It1, _beg1, _size1 > &  x,
const iodev_it< _Cont2, _It2, _beg2, _size2 > &  y 
)
inlinenoexcept

Definition at line 915 of file dev_iterators.h.

◆ operator==() [1/6]

template<typename _Tp , size_t _Nm>
bool utl::operator== ( const array< _Tp, _Nm > &  lhs,
const array< _Tp, _Nm > &  rhs 
)
inline

Definition at line 181 of file array.h.

◆ operator==() [2/6]

template<typename _Tp , size_t _Nm>
bool utl::operator== ( const id_t< _Tp, _Nm > &  lhs,
const id_t< _Tp, _Nm > &  rhs 
)
inline

Definition at line 201 of file id.h.

◆ operator==() [3/6]

template<typename _C1 , typename _D1 , typename _C2 , typename _D2 >
bool utl::operator== ( const istreamdev_it< _C1, _D1 > &  lhs,
const istreamdev_it< _C2, _D2 > &  rhs 
)
inlinenoexcept

Equality comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid.

Parameters
lhsLeft hand site iterator
rhsRight hand site iterator
Returns
True in equality

Definition at line 229 of file dev_iterators.h.

◆ operator==() [4/6]

template<typename _Cont1 , typename _It1 , index_t _beg1, index_t _end1, typename _Cont2 , typename _It2 , index_t _beg2, index_t _end2>
bool utl::operator== ( const outdev_it< _Cont1, _It1, _beg1, _end1 > &  lhs,
const outdev_it< _Cont2, _It2, _beg2, _end2 > &  rhs 
)
inlinenoexcept

Equality comparison template so that comparison between cv-qualified and non-cv-qualified iterators be valid.

Note
The following are not requirements for output iterator. We provide them nevertheless. Required: The rhs and lhs MUST belong to the same owner or the result is undefined.
Parameters
lhsLeft hand site iterator
rhsRight hand site iterator
Returns
True in equality

Definition at line 366 of file dev_iterators.h.

◆ operator==() [5/6]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool utl::operator== ( const indev_it< _Cont1, _It1, _beg1, _size1 > &  x,
const indev_it< _Cont2, _It2, _beg2, _size2 > &  y 
)
inlinenoexcept

Equality

Definition at line 608 of file dev_iterators.h.

◆ operator==() [6/6]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool utl::operator== ( const iodev_it< _Cont1, _It1, _beg1, _size1 > &  x,
const iodev_it< _Cont2, _It2, _beg2, _size2 > &  y 
)
inlinenoexcept

Equality

Definition at line 893 of file dev_iterators.h.

◆ operator>() [1/4]

template<typename _Tp , size_t _Nm>
bool utl::operator> ( const array< _Tp, _Nm > &  lhs,
const array< _Tp, _Nm > &  rhs 
)
inline

Definition at line 196 of file array.h.

◆ operator>() [2/4]

template<typename _Tp , size_t _Nm>
bool utl::operator> ( const id_t< _Tp, _Nm > &  lhs,
const id_t< _Tp, _Nm > &  rhs 
)
inline

Definition at line 217 of file id.h.

◆ operator>() [3/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool utl::operator> ( const indev_it< _Cont1, _It1, _beg1, _size1 > &  x,
const indev_it< _Cont2, _It2, _beg2, _size2 > &  y 
)
inlinenoexcept

Definition at line 636 of file dev_iterators.h.

◆ operator>() [4/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool utl::operator> ( const iodev_it< _Cont1, _It1, _beg1, _size1 > &  x,
const iodev_it< _Cont2, _It2, _beg2, _size2 > &  y 
)
inlinenoexcept

Definition at line 921 of file dev_iterators.h.

◆ operator>=() [1/4]

template<typename _Tp , size_t _Nm>
bool utl::operator>= ( const array< _Tp, _Nm > &  lhs,
const array< _Tp, _Nm > &  rhs 
)
inline

Definition at line 207 of file array.h.

◆ operator>=() [2/4]

template<typename _Tp , size_t _Nm>
bool utl::operator>= ( const id_t< _Tp, _Nm > &  lhs,
const id_t< _Tp, _Nm > &  rhs 
)
inline

Definition at line 227 of file id.h.

◆ operator>=() [3/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool utl::operator>= ( const indev_it< _Cont1, _It1, _beg1, _size1 > &  x,
const indev_it< _Cont2, _It2, _beg2, _size2 > &  y 
)
inlinenoexcept

Definition at line 642 of file dev_iterators.h.

◆ operator>=() [4/4]

template<typename _Cont1 , typename _It1 , index_t _beg1, size_t _size1, typename _Cont2 , typename _It2 , index_t _beg2, size_t _size2>
bool utl::operator>= ( const iodev_it< _Cont1, _It1, _beg1, _size1 > &  x,
const iodev_it< _Cont2, _It2, _beg2, _size2 > &  y 
)
inlinenoexcept

Definition at line 927 of file dev_iterators.h.

◆ swap()

template<typename _Tp , size_t _Nm>
void utl::swap ( array< _Tp, _Nm > &  lhs,
array< _Tp, _Nm > &  rhs 
)
inlinenoexcept

Definition at line 214 of file array.h.

Variable Documentation

◆ Arithmetic

template<class T >
_utlConcept utl::Arithmetic
Initial value:
=
std::is_arithmetic<T>::value && Scalar<T> && StrictTotallyOrdered<T>

Arithmetic

Definition at line 736 of file stl.h.

◆ Assignable

template<class LHS , class RHS >
_utlConcept utl::Assignable
Initial value:
=
std::is_assignable<LHS, RHS>::value

Assignable

Note
!= std:: on CommonReference

Definition at line 366 of file stl.h.

◆ Boolean

template<class B >
_utlConcept utl::Boolean
Initial value:
=
Movable<remove_cvref_t<B>> &&
ConvertibleTo<const _ref_t<B>, bool> &&
Same<meta::true_, details::is_boolean_t<B>>

Definition at line 551 of file stl.h.

◆ Common

template<class T , class U >
_utlConcept utl::Common
Initial value:
=
Same<std::common_type_t<T, U>, std::common_type_t<U, T>>

Definition at line 301 of file stl.h.

◆ CommonReference

template<class T , class U >
_utlConcept utl::CommonReference
Initial value:
=
Same<common_reference_t<T, U>, common_reference_t<U, T>> &&
ConvertibleTo<T, common_reference_t<T, U>> &&
ConvertibleTo<U, common_reference_t<T, U>>

Definition at line 293 of file stl.h.

◆ Constructible

template<class T , class... Args>
_utlConcept utl::Constructible
Initial value:
=
Destructible<T> && std::is_constructible<T, Args...>::value

Constructible

Definition at line 438 of file stl.h.

◆ ConvertibleTo

template<class From , class To >
_utlConcept utl::ConvertibleTo = std::is_convertible<From, To>::value

ConvertibleTo

Definition at line 87 of file stl.h.

◆ Copyable

template<class T >
_utlConcept utl::Copyable
Initial value:
=
CopyConstructible<T> &&
Movable<T> &&
Assignable<_ref_t<T>, const _ref_t<T>>

Copyable

Definition at line 480 of file stl.h.

◆ CopyAssignable

template<typename T >
_utlConcept utl::CopyAssignable = std::is_copy_assignable<T>::value

Definition at line 359 of file stl.h.

◆ CopyConstructible

template<class T >
_utlConcept utl::CopyConstructible
Initial value:
=
MoveConstructible<T> &&
Constructible<T, _ref_t<T>> && ConvertibleTo<_ref_t<T>, T> &&
Constructible<T, const _ref_t<T>> && ConvertibleTo<const _ref_t<T>, T> &&
Constructible<T, const T> && ConvertibleTo<const T, T>

CopyConstructible

Definition at line 459 of file stl.h.

◆ DefaultConstructible

template<class T >
_utlConcept utl::DefaultConstructible = Constructible<T>

DefaultConstructible

Definition at line 444 of file stl.h.

◆ DerivedFrom

template<class Derived , class Base >
_utlConcept utl::DerivedFrom
Initial value:
=
std::is_base_of<Base, Derived>::value &&
std::is_convertible<const volatile Derived*, const volatile Base*>::value

DerivedFrom

Definition at line 71 of file stl.h.

◆ Destructible

template<class T >
_utlConcept utl::Destructible = std::is_nothrow_destructible<T>::value

Destructible

Definition at line 432 of file stl.h.

◆ EqualityComparable

template<class T >
_utlConcept utl::EqualityComparable = WeaklyEqualityComparableWith<T, T>

Definition at line 596 of file stl.h.

◆ EqualityComparableWith

template<class T , class U >
_utlConcept utl::EqualityComparableWith
Initial value:
=
EqualityComparable<T> &&
EqualityComparable<U> &&
WeaklyEqualityComparableWith<T, U>

Definition at line 599 of file stl.h.

◆ FloatingPoint

template<class T >
_utlConcept utl::FloatingPoint
Initial value:
=
std::is_floating_point<T>::value && Arithmetic<T>

FloatingPoint

Definition at line 743 of file stl.h.

◆ Idx_dev

template<typename _Tp >
constexpr bool utl::Idx_dev = idx_dev_details::is_idx_dev_ <_Tp>::value

Predicate for input device checking

Parameters
_TpType to check
Returns
True if _Tp is a input device

Definition at line 523 of file idx_dev.h.

◆ In_dev

template<typename _Tp >
constexpr bool utl::In_dev = in_dev_details::is_in_dev_ <_Tp>::value

Predicate for input device checking

Parameters
_TpType to check
Returns
True if _Tp is a input device

Definition at line 335 of file in_dev.h.

◆ Inbuf_dev

template<typename _Tp >
constexpr bool utl::Inbuf_dev = inbuf_dev_details::is_inbuf_dev_ <_Tp>::value

Predicate for input device checking

Parameters
_TpType to check
Returns
True if _Tp is a input device

Definition at line 380 of file inbuf_dev.h.

◆ Integral

template<class T >
_utlConcept utl::Integral = std::is_integral<T>::value

Integral

Definition at line 340 of file stl.h.

◆ Invocable

template<class F , class... Args>
_utlConcept utl::Invocable = is_invocable<F, Args...>::value

Invocable

Definition at line 750 of file stl.h.

◆ Movable

template<class T >
_utlConcept utl::Movable
Initial value:
=
std::is_object<T>::value &&
MoveConstructible<T> &&
Assignable<_ref_t<T>, T> &&
Swappable<T>

Movable

Definition at line 469 of file stl.h.

◆ MoveAssignable

template<typename T >
_utlConcept utl::MoveAssignable = std::is_move_assignable<T>::value

Definition at line 356 of file stl.h.

◆ MoveConstructible

template<class T >
_utlConcept utl::MoveConstructible
Initial value:
=
Constructible<T, T> && ConvertibleTo<T, T>

MoveConstructible

Note
Another approach would be std::is_move_constructible<T>::value;

Definition at line 452 of file stl.h.

◆ Out_dev

template<typename _Tp >
constexpr bool utl::Out_dev = out_dev_details::is_out_dev_<_Tp>::value

Predicate for output device checking

Parameters
_TpType to check
Returns
True if _Tp is a output device

Definition at line 357 of file out_dev.h.

◆ Predicate

template<class F , class... Args>
_utlConcept utl::Predicate
Initial value:
=
RegularInvocable<F, Args...> &&
Boolean<invoke_result_t<F, Args...>>
_utlConcept RegularInvocable
Definition: stl.h:756
meta::eval< invoke_result< _Callable, _Args... > > invoke_result_t
invoke_result_t (for C++14)
Definition: invoke.h:180
_utlConcept Boolean
Definition: stl.h:551

Definition at line 759 of file stl.h.

◆ Regular

template<class T >
_utlConcept utl::Regular = Semiregular<T> && EqualityComparable<T>

Regular

Definition at line 723 of file stl.h.

◆ RegularInvocable

template<class F , class... Args>
_utlConcept utl::RegularInvocable = Invocable<F, Args...>

Definition at line 756 of file stl.h.

◆ Relation

template<class R , class T , class U >
_utlConcept utl::Relation
Initial value:
=
Predicate<R, T, T> && Predicate<R, U, U> &&
Predicate<R, T, U> && Predicate<R, U, T>

Definition at line 764 of file stl.h.

◆ Same

template<class T , class U >
_utlConcept utl::Same = meta::same_<T, U>::value

Same

Definition at line 62 of file stl.h.

◆ Scalar

template<class T >
_utlConcept utl::Scalar
Initial value:
=
std::is_scalar<T>::value && Regular<T>

Scalar

Definition at line 729 of file stl.h.

◆ Semiregular

template<class T >
_utlConcept utl::Semiregular = Copyable<T> && DefaultConstructible<T>

Semiregular

Definition at line 717 of file stl.h.

◆ SignedIntegral

template<class T >
_utlConcept utl::SignedIntegral = Integral<T> && std::is_signed<T>::value

Signed Integral

Definition at line 346 of file stl.h.

◆ StrictTotallyOrdered

template<class T >
_utlConcept utl::StrictTotallyOrdered
Initial value:
=
EqualityComparable<T> &&
Same <meta::true_, details::is_strict_totally_ordered_t<T>>

Definition at line 647 of file stl.h.

◆ StrictTotallyOrderedWith

template<class T , class U >
_utlConcept utl::StrictTotallyOrderedWith
Initial value:
=
StrictTotallyOrdered<T> &&
StrictTotallyOrdered<U> &&
EqualityComparableWith<T, U> &&
Same <meta::true_, details::is_strict_totally_ordered_with_t<T, U>>

Definition at line 706 of file stl.h.

◆ StrictWeakOrder

template<class R , class T , class U >
_utlConcept utl::StrictWeakOrder = Relation<R, T, U>

Definition at line 769 of file stl.h.

◆ Swappable

template<class T >
_utlConcept utl::Swappable = is_swappable_with<T, T>::type::value

Definition at line 425 of file stl.h.

◆ SwappableWith

template<class T , class U >
_utlConcept utl::SwappableWith
Initial value:
=
is_swappable_with<T, T>::type::value &&
is_swappable_with<U, U>::type::value &&
is_swappable_with<T, U>::type::value &&
is_swappable_with<U, T>::type::value

Definition at line 413 of file stl.h.

◆ UnsignedIntegral

template<class T >
_utlConcept utl::UnsignedIntegral = Integral<T> && !std::is_signed<T>::value

Unsigned Integral

Definition at line 352 of file stl.h.

◆ WeaklyEqualityComparableWith

template<class T , class U >
_utlConcept utl::WeaklyEqualityComparableWith
Initial value:
=
Same<meta::true_, details::is_weakly_equality_comparable_with_t<T, U>>

Definition at line 582 of file stl.h.

◆ WeaklyIncrementable

template<class I >
_utlConcept utl::WeaklyIncrementable
Initial value:
=
Semiregular<I>
&& Same<_ref_t<I>, meta::detected_t<detail::try_ppI, _ref_t<I>>>
&& meta::is_detected<detail::try_Ipp, _ref_t<I>>::value

Definition at line 49 of file iterators.h.