//===-- MemorySizeDistributions ---------------------------------*- 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
//
//===----------------------------------------------------------------------===//
//
// Memory functions operate on buffers of certain sizes. This file provides
// probability distributions observed at runtime for a set of applications.
// These distributions are used to benchmark and compare memory functions
// implementations.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIBC_BENCHMARKS_MEMORYSIZEDISTRIBUTIONS_H
#define LLVM_LIBC_BENCHMARKS_MEMORYSIZEDISTRIBUTIONS_H

#include <llvm/ADT/ArrayRef.h>
#include <llvm/ADT/StringRef.h>

namespace llvm {
namespace libc_benchmarks {

/// A simple POD exposing caracteristics of a memory function size
/// distributions. The underlying data is immutable.
struct MemorySizeDistribution {
  StringRef Name;                 // The name of the distribution.
  ArrayRef<double> Probabilities; // Size indexed array of probabilities.
};

/// Returns a list of memcpy size distributions.
ArrayRef<MemorySizeDistribution> getMemcpySizeDistributions();

/// Returns a list of memset size distributions.
ArrayRef<MemorySizeDistribution> getMemsetSizeDistributions();

/// Returns a list of memcmp size distributions.
ArrayRef<MemorySizeDistribution> getMemcmpSizeDistributions();

/// Returns the first MemorySizeDistribution from Distributions with the
/// specified Name.
MemorySizeDistribution
getDistributionOrDie(ArrayRef<MemorySizeDistribution> Distributions,
                     StringRef Name);

} // namespace libc_benchmarks
} // namespace llvm

#endif // LLVM_LIBC_BENCHMARKS_MEMORYSIZEDISTRIBUTIONS_H
