mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-01 05:26:45 +08:00
refs #852 Added reverse iterators to CRange and CSequence.
This commit is contained in:
@@ -180,6 +180,8 @@ namespace BlackMisc
|
||||
typedef const value_type *const_pointer;
|
||||
typedef I const_iterator;
|
||||
typedef I iterator;
|
||||
typedef std::reverse_iterator<I> const_reverse_iterator;
|
||||
typedef std::reverse_iterator<I> reverse_iterator;
|
||||
typedef typename std::iterator_traits<I>::difference_type difference_type;
|
||||
//! @}
|
||||
|
||||
@@ -194,6 +196,17 @@ namespace BlackMisc
|
||||
const_iterator cend() const { return m_end; }
|
||||
//! @}
|
||||
|
||||
//! Reverse begin and end iterators.
|
||||
//! @{
|
||||
const_reverse_iterator rbegin() const { return const_reverse_iterator(m_end); }
|
||||
const_reverse_iterator crbegin() const { return const_reverse_iterator(m_end); }
|
||||
const_reverse_iterator rend() const { return const_reverse_iterator(m_begin); }
|
||||
const_reverse_iterator crend() const { return const_reverse_iterator(m_begin); }
|
||||
//! @}
|
||||
|
||||
//! Create a range from reverse iterators.
|
||||
CRange<const_reverse_iterator> reverse() const { return { rbegin(), rend() }; }
|
||||
|
||||
//! Implicit conversion to any container of value_type which supports push_back. This will copy elements.
|
||||
template <class T, class = std::enable_if_t<std::is_convertible<value_type, typename T::value_type>::value>>
|
||||
operator T() const
|
||||
|
||||
@@ -57,6 +57,8 @@ namespace BlackMisc
|
||||
typedef const T *const_pointer;
|
||||
typedef typename Iterators::ConstRandomAccessIterator<T> const_iterator;
|
||||
typedef typename Iterators::RandomAccessIterator<T> iterator;
|
||||
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
|
||||
typedef std::reverse_iterator<iterator> reverse_iterator;
|
||||
typedef ptrdiff_t difference_type;
|
||||
typedef int size_type;
|
||||
//! @}
|
||||
@@ -113,6 +115,24 @@ namespace BlackMisc
|
||||
//! Returns const iterator one past the end of the sequence.
|
||||
const_iterator cend() const { return pimpl() ? pimpl()->cend() : const_iterator(); }
|
||||
|
||||
//! Returns iterator at the beginning of the reversed sequence.
|
||||
reverse_iterator rbegin() { return reverse_iterator(end()); }
|
||||
|
||||
//! Returns const iterator at the beginning of the reversed sequence.
|
||||
const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
|
||||
|
||||
//! Returns const iterator at the beginning of the reversed sequence.
|
||||
const_reverse_iterator crbegin() const { return const_reverse_iterator(cend()); }
|
||||
|
||||
//! Returns iterator at the end of the reversed sequence.
|
||||
reverse_iterator rend() { return reverse_iterator(begin()); }
|
||||
|
||||
//! Returns const iterator at the end of the reversed sequence.
|
||||
const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
|
||||
|
||||
//! Returns const iterator at the end of the reversed sequence.
|
||||
const_reverse_iterator crend() const { return const_reverse_iterator(cbegin()); }
|
||||
|
||||
//! Swap this sequence with another.
|
||||
void swap(CSequence &other) noexcept { m_pimpl.swap(other.m_pimpl); }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user