/*** Copyright (C) 2024 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: auReverseIterator.ipp Date: 2024-08-31 Author: Reece ***/ #pragma once template constexpr AuReverseIterator::AuReverseIterator(Iterator that) : iterator(AuMove(that)) { } template template constexpr AuReverseIterator::AuReverseIterator(const AuReverseIterator &that) : iterator(that.iterator) { } template template constexpr AuReverseIterator &AuReverseIterator::operator=(const AuReverseIterator &that) { iterator = that.iterator; return *this; } template constexpr Iterator AuReverseIterator::base() const { return iterator; } template constexpr Iterator AuReverseIterator::Base() const { return iterator; } template constexpr AuReverseIterator::reference AuReverseIterator::operator*() const { Iterator ret = iterator; return *--ret; } template constexpr AuReverseIterator::pointer AuReverseIterator::operator->() const { Iterator ret = iterator; --ret; if constexpr (AuIsPointer_v) { return ret; } else { return ret.operator->(); } } template constexpr AuReverseIterator &AuReverseIterator::operator++() { --iterator; return *this; } template constexpr AuReverseIterator AuReverseIterator::operator++(int) { AuReverseIterator ret = *this; --iterator; return ret; } template constexpr AuReverseIterator &AuReverseIterator::operator--() { ++iterator; return *this; } template constexpr AuReverseIterator AuReverseIterator::operator--(int) { AuReverseIterator ret = *this; ++iterator; return ret; } template constexpr AuReverseIterator AuReverseIterator::operator+(const difference_type offset) const { return AuReverseIterator(iterator - offset); } template constexpr AuReverseIterator &AuReverseIterator::operator+=(const difference_type offset) { iterator -= offset; return *this; } template constexpr AuReverseIterator AuReverseIterator::operator-(const difference_type offset) const { return AuReverseIterator(iterator + offset); } template constexpr AuReverseIterator &AuReverseIterator::operator-=(const difference_type offset) { return *this; } template constexpr AuReverseIterator::reference AuReverseIterator::operator[](const difference_type offset) const { return iterator[static_cast(-offset - 1)]; }