35 template <
typename T >
36 class static_circular_buffer_iterator;
49 template <
typename T, std::
size_t N >
61 "static_circular_buffer: N must be less than index_type max value" );
106 return iterator{ storage_.data(), storage_.data() +
N, storage_.data() + from_ };
112 storage_.data(), storage_.data() +
N, storage_.data() + from_ };
115 [[nodiscard]] std::reverse_iterator< iterator >
rbegin()
117 return std::make_reverse_iterator(
end() );
120 [[nodiscard]] std::reverse_iterator< const_iterator >
rbegin()
const
122 return std::make_reverse_iterator(
end() );
127 return storage_[
static_cast< size_type >( from_ )];
132 return storage_[
static_cast< size_type >( from_ )];
137 T item = std::move(
front() );
144 storage_.delete_item(
static_cast< size_type >( from_ ) );
145 from_ = next( from_ );
160 return iterator{ storage_.data(), storage_.data() +
N, storage_.data() + to_ };
166 storage_.data(), storage_.data() +
N, storage_.data() + to_ };
169 [[nodiscard]] std::reverse_iterator< iterator >
rend()
171 return std::make_reverse_iterator(
begin() );
174 [[nodiscard]] std::reverse_iterator< const_iterator >
rend()
const
176 return std::make_reverse_iterator(
begin() );
181 return storage_[
static_cast< size_type >( prev( to_ ) )];
186 return storage_[
static_cast< size_type >( prev( to_ ) )];
194 template <
typename... Args >
197 T& ref = storage_.emplace_item(
198 static_cast< size_type >( to_ ), std::forward< Args >(
args )... );
216 auto t =
static_cast< size_type >( to_ );
220 return t + (
N -
f );
228 [[nodiscard]]
bool full()
const
230 return from_ != -1 && to_ == from_;
257 to_ =
static_cast< index_type >( other.size() );
259 for ( T
const& item : other )
265 static_assert( std::is_nothrow_move_constructible_v< T > );
267 to_ =
static_cast< index_type >( other.size() );
269 for ( T& item : other )
281 return i == 0 ?
N - 1 : i - 1;
284 template <
typename U >
288 template <
typename T, std::
size_t N >
292 return std::lexicographical_compare_three_way( lh.
begin(), lh.
end(), rh.
begin(), rh.
end() );
295 template <
typename T, std::
size_t N >
299 auto size = lh.
size();
300 if ( size != rh.
size() )
306 template <
typename T, std::
size_t N >
310 return !( lh == rh );
313 #ifdef EMLABCPP_USE_OSTREAM
315 template <
typename T, std::
size_t N >
316 std::ostream&
operator<<( std::ostream& os, static_circular_buffer< T, N >
const& cb )
318 return os <<
view{ cb };
324 template <
typename T >
325 struct std::iterator_traits<
emlabcpp::static_circular_buffer_iterator< T > >
338 template <
typename T >
343 static constexpr
bool is_const = std::is_const_v< T >;
345 using reference = std::conditional_t< is_const, value_type const&, value_type& >;
348 typename std::iterator_traits< static_circular_buffer_iterator< T > >
::difference_type;
393 return p_ <=> other.p_;
398 return p_ == other.p_;
Definition: static_circular_buffer.h:341
static constexpr bool is_const
Definition: static_circular_buffer.h:343
static_circular_buffer_iterator(static_circular_buffer_iterator const &) noexcept=default
static_circular_buffer_iterator(T *beg, T *end, T *p) noexcept
Definition: static_circular_buffer.h:350
static_circular_buffer_iterator & operator--() noexcept
Definition: static_circular_buffer.h:384
value_type const & const_reference
Definition: static_circular_buffer.h:346
reference operator*() const noexcept
Definition: static_circular_buffer.h:371
typename std::iterator_traits< static_circular_buffer_iterator< T > >::difference_type difference_type
Definition: static_circular_buffer.h:348
static_circular_buffer_iterator(static_circular_buffer_iterator &&) noexcept=default
bool operator==(static_circular_buffer_iterator const &other) const noexcept
Definition: static_circular_buffer.h:396
static_circular_buffer_iterator & operator++() noexcept
Definition: static_circular_buffer.h:376
std::conditional_t< is_const, value_type const &, value_type & > reference
Definition: static_circular_buffer.h:345
T value_type
Definition: static_circular_buffer.h:344
auto operator<=>(static_circular_buffer_iterator const &other) const noexcept
Definition: static_circular_buffer.h:391
Class implementing circular buffer of any type for up to N elements.
Definition: static_circular_buffer.h:51
const_reference back() const
Definition: static_circular_buffer.h:184
T value_type
Definition: static_circular_buffer.h:63
void pop_front(size_type n)
Definition: static_circular_buffer.h:150
std::reverse_iterator< iterator > rbegin()
Definition: static_circular_buffer.h:115
constexpr size_type capacity() const
other methods
Definition: static_circular_buffer.h:207
size_type size() const
Definition: static_circular_buffer.h:212
T & reference
Definition: static_circular_buffer.h:65
bool empty() const
Definition: static_circular_buffer.h:223
void clear()
Definition: static_circular_buffer.h:233
reference back()
Definition: static_circular_buffer.h:179
static_circular_buffer() noexcept=default
std::reverse_iterator< iterator > rend()
Definition: static_circular_buffer.h:169
static_circular_buffer(static_circular_buffer &&other) noexcept
Definition: static_circular_buffer.h:77
const_iterator begin() const
Definition: static_circular_buffer.h:109
static_circular_buffer & operator=(static_circular_buffer const &other)
Definition: static_circular_buffer.h:83
std::reverse_iterator< const_iterator > rbegin() const
Definition: static_circular_buffer.h:120
uint32_t size_type
Definition: static_circular_buffer.h:64
T take_front()
Definition: static_circular_buffer.h:135
const_iterator end() const
Definition: static_circular_buffer.h:163
T & emplace_back(Args &&... args)
Definition: static_circular_buffer.h:195
iterator end()
methods for handling the back side of the circular buffer
Definition: static_circular_buffer.h:158
void pop_front()
Definition: static_circular_buffer.h:142
T const & const_reference
Definition: static_circular_buffer.h:66
reference front()
Definition: static_circular_buffer.h:125
bool full() const
Definition: static_circular_buffer.h:228
const_reference front() const
Definition: static_circular_buffer.h:130
static constexpr std::size_t max_size
Definition: static_circular_buffer.h:54
void push_back(T item)
Definition: static_circular_buffer.h:189
~static_circular_buffer()
Definition: static_circular_buffer.h:238
static_circular_buffer & operator=(static_circular_buffer &&other) noexcept
Definition: static_circular_buffer.h:92
int32_t index_type
Definition: static_circular_buffer.h:57
std::reverse_iterator< const_iterator > rend() const
Definition: static_circular_buffer.h:174
iterator begin()
methods for handling the front side of the circular buffer
Definition: static_circular_buffer.h:104
MIT License.
Definition: impl.h:31
view(Container &cont) -> view< iterator_of_t< Container > >
The container deduction guide uses iterator_of_t.
constexpr bool equal(LhContainer &&lh, RhContainer &&rh, BinaryPredicateCallable &&f=std::equal_to< void >{})
Returns true if containers 'lh' and 'rh' has same size and calls to predicate f - f(lh[i],...
Definition: algorithm.h:356
Args const & args
Definition: min_max.h:83
constexpr Derived max(vec_point_base< Derived, N > const &a, vec_point_base< Derived, N > const &b)
Definition: vec_point_base.h:229
auto operator<=>(static_circular_buffer< T, N > const &lh, static_circular_buffer< T, N > const &rh)
Definition: static_circular_buffer.h:290
constexpr bool operator!=(pose const &x, pose const &y)
negation of operator== between poses
Definition: pose.h:99
std::ostream & operator<<(std::ostream &os, string_buffer< N > const &sb)
Definition: string_buffer.h:112
UnaryCallable && f
Definition: algorithm.h:161
N
Definition: static_storage.h:97
constexpr bool operator==(pose const &x, pose const &y)
compares poses on their position and orientation
Definition: pose.h:93
generic_iterator simplifies custom iterator implementation using CRTP.
Definition: iterator.h:62
Continuous data container that can contain N of uninitialized elements.
Definition: static_storage.h:37
constexpr T & emplace_item(size_type const i, Args &&... args) noexcept(std::is_nothrow_constructible_v< T, Args... >)
Constructs an item at position i with arguments args...
Definition: static_storage.h:61
T value_type
Definition: static_circular_buffer.h:327
std::bidirectional_iterator_tag iterator_category
Definition: static_circular_buffer.h:332
std::make_signed_t< std::size_t > difference_type
Definition: static_circular_buffer.h:328
value_type * pointer
Definition: static_circular_buffer.h:329
value_type & reference
Definition: static_circular_buffer.h:331
value_type const * const_pointer
Definition: static_circular_buffer.h:330