Seed Core_IO from doc snapshot
This commit is contained in:
38
tjp/core/io/calls.hpp
Executable file
38
tjp/core/io/calls.hpp
Executable file
@@ -0,0 +1,38 @@
|
||||
// License: Modified MIT (NON-AI)
|
||||
// See the LICENSE file in the root directory for license information.
|
||||
// Copyright 2025 Timothy Prepscius
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <tuple>
|
||||
#include <utility>
|
||||
|
||||
namespace tjp::core::io {
|
||||
|
||||
template<typename F, typename... Args>
|
||||
void call_f_1s(F&& f, Args&&... args) {
|
||||
(f(std::forward<Args>(args)), ...);
|
||||
}
|
||||
|
||||
template<typename F, typename Tuple, std::size_t... I>
|
||||
void call_f_2s_(F &&f, Tuple&& tup, std::index_sequence<I...>) {
|
||||
(f(
|
||||
std::forward<decltype(std::get<I * 2>(std::forward<Tuple>(tup)))>(
|
||||
std::get<I * 2>(std::forward<Tuple>(tup))),
|
||||
std::forward<decltype(std::get<I * 2 + 1>(std::forward<Tuple>(tup)))>(
|
||||
std::get<I * 2 + 1>(std::forward<Tuple>(tup)))
|
||||
), ...);
|
||||
}
|
||||
|
||||
template<typename F, typename... Args>
|
||||
void call_f_2s(F &&f, Args&&... args)
|
||||
{
|
||||
static_assert(sizeof...(Args) % 2 == 0, "Arguments must be in key-value pairs");
|
||||
|
||||
auto args_tuple = std::forward_as_tuple(std::forward<Args>(args)...);
|
||||
constexpr std::size_t N = sizeof...(Args) / 2;
|
||||
|
||||
call_f_2s_(std::forward<F>(f), args_tuple, std::make_index_sequence<N>{});
|
||||
}
|
||||
|
||||
} // namespace
|
||||
Reference in New Issue
Block a user