/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: auTupleUtils.hpp Date: 2022-2-1 File: AuroraUtils.hpp File: auROXTLUtils.hpp Date: 2021-6-9 Author: Reece ***/ #pragma once #if !defined(AURORA_RUNTIME_MAKE_PAIR) #define AURORA_RUNTIME_MAKE_PAIR std::make_pair #endif template static auline auto AuMakePair(Args&&... args) { return AURORA_RUNTIME_MAKE_PAIR(AuForward(args)...); } #if !defined(AURORA_RUNTIME_MAKE_TUPLE) #define AURORA_RUNTIME_MAKE_TUPLE std::make_tuple #endif template static auline auto AuMakeTuple(Args&&... args) { return AURORA_RUNTIME_MAKE_TUPLE(AuForward(args)...); } #if !defined(AURORA_RUNTIME_GET_TUPLE) #define AURORA_RUNTIME_GET_TUPLE std::get #endif template static auline auto &AuGet(Args&&... args) { return AURORA_RUNTIME_GET_TUPLE(AuForward(args)...); } #if !defined(AURORA_RUNTIME_TUPLE_CAT) #define AURORA_RUNTIME_TUPLE_CAT std::tuple_cat #endif template static auline auto AuTupleCat(Args&&... args) { return AURORA_RUNTIME_TUPLE_CAT(AuForward(args)...); } #if !defined(AURORA_RUNTIME_APPLY) #define AURORA_RUNTIME_APPLY std::apply #endif template static auline auto AuTupleApply(F &&f, Tuple &&t) { return AURORA_RUNTIME_APPLY(f, t); } template auto AuTuplePopFrontImpl(const Tuple &tuple, std::index_sequence) { return AURORA_RUNTIME_MAKE_TUPLE(AuGet<1 + Is>(tuple)...); } template auto AuTuplePopFront(const Tuple &tuple) { return AuTuplePopFrontImpl(tuple, std::make_index_sequence::value - 1>()); }