flatten 20260225
This commit is contained in:
67
tjp/core/containers/Reversed.hpp
Executable file
67
tjp/core/containers/Reversed.hpp
Executable file
@@ -0,0 +1,67 @@
|
||||
// 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 <utility>
|
||||
#include <cstddef>
|
||||
|
||||
namespace tjp {
|
||||
namespace core {
|
||||
|
||||
template<typename T>
|
||||
T reversed (T &&t)
|
||||
{
|
||||
T c(std::move(t));
|
||||
for (auto i=0; i<c.size()/2; ++i)
|
||||
std::swap(c[i], c[c.size()-(i+1)]);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
struct Reversed : T
|
||||
{
|
||||
typedef T Super;
|
||||
typedef T Unreversed;
|
||||
|
||||
template<typename ...U>
|
||||
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
|
||||
Reference in New Issue
Block a user