// -*- C++ -*-
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef BENCHMARK_UTILITIES_HPP
#define BENCHMARK_UTILITIES_HPP

#include <cassert>
#include <type_traits>

#include "benchmark/benchmark.h"

namespace UtilitiesInternal {
  template <class Container>
  auto HaveDataImpl(int) -> decltype((std::declval<Container&>().data(), std::true_type{}));
  template <class Container>
  auto HaveDataImpl(long) -> std::false_type;
  template <class T>
  using HasData = decltype(HaveDataImpl<T>(0));
} // namespace UtilitiesInternal

template <class Container, std::enable_if_t<UtilitiesInternal::HasData<Container>::value>* = nullptr>
void DoNotOptimizeData(Container &c) { benchmark::DoNotOptimize(c.data()); }
template <class Container, std::enable_if_t<!UtilitiesInternal::HasData<Container>::value>* = nullptr>
void DoNotOptimizeData(Container &c) { benchmark::DoNotOptimize(&c); }


#endif // BENCHMARK_UTILITIES_HPP
