flatten 20260225

This commit is contained in:
Timothy Prepscius
2026-02-25 12:43:06 -05:00
commit 996151a56a
521 changed files with 46722 additions and 0 deletions

View 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