// Copyright 2017 The Fuchsia 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 LIB_FXL_FUNCTIONAL_APPLY_H_
#define LIB_FXL_FUNCTIONAL_APPLY_H_

#include <tuple>
#include <type_traits>
#include <utility>

namespace fxl {

namespace internal {
template <class F, class Tuple, size_t... I>
constexpr decltype(auto) ApplyImpl(F&& f, Tuple&& t, std::integer_sequence<size_t, I...>) {
  return std::forward<F>(f)(std::get<I>(std::forward<Tuple>(t))...);
}
}  // namespace internal

// Invoke the callable object |f| with |t| as arguments.
template <typename F, typename Tuple>
decltype(auto) Apply(F&& f, Tuple&& t) {
  return internal::ApplyImpl(
      std::forward<F>(f), std::forward<Tuple>(t),
      std::make_index_sequence<std::tuple_size<std::decay_t<Tuple>>::value>{});
}

}  // namespace fxl

#endif  // LIB_FXL_FUNCTIONAL_APPLY_H_
