// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef VM_TOOLS_CONCIERGE_APPLY_IMPL_H_
#define VM_TOOLS_CONCIERGE_APPLY_IMPL_H_

#include <utility>

namespace vm_tools {
namespace internal {

template <typename U, typename... Ts, class Tuple, std::size_t... I>
U ApplyImpl(base::OnceCallback<U(Ts...)> f,
            Tuple&& t,
            std::index_sequence<I...>) {
  return std::move(f).Run(std::move(std::get<I>(std::forward<Tuple>(t)))...);
}

template <typename U, typename... Ts, class Tuple>
U Apply(base::OnceCallback<U(Ts...)> f, Tuple&& t) {
  return ApplyImpl(std::move(f), std::forward<Tuple>(t),
                   std::make_index_sequence<sizeof...(Ts)>{});
}

template <typename U, typename T>
U Apply(base::OnceCallback<U(T)> f, T&& val) {
  return std::move(f).Run(std::forward<T>(val));
}

}  // namespace internal
}  // namespace vm_tools

#endif  // VM_TOOLS_CONCIERGE_APPLY_IMPL_H_
