// License: Modified MIT (NON-AI) // See the LICENSE file in the root directory for license information. // Copyright 2025 Timothy Prepscius #pragma once #include "Reversed.h" #include #include namespace tjp { namespace core { template T reversed (T &&t) { T c(std::move(t)); for (auto i=0; i struct Reversed : T { typedef T Super; typedef T Unreversed; template Reversed(U&& ...u) : Super(u...) {} typedef typename Super::reverse_iterator iterator; typedef typename Super::iterator reverse_iterator; typedef typename Super::const_reverse_iterator const_iterator; typedef typename Super::const_iterator const_reverse_iterator; auto begin() { return Super::rbegin(); } auto begin() const { return Super::rbegin(); } auto end() { return Super::rend(); } auto end() const { return Super::rend(); } auto rbegin() { return Super::begin(); } auto rbegin() const { return Super::begin(); } auto rend() { return Super::end(); } auto rend() const { return Super::end(); } auto &back() { return Super::front(); } auto &back() const { return Super::front(); } auto &front() { return Super::back(); } auto &front() const { return Super::back(); } auto &operator[](size_t i) { return Super::operator[](Super::size()-1-i); } auto &operator[] (size_t i) const { return Super::operator[](Super::size()-1-i); } } ; } // namespace utilities } // namespace