llvm/llvm/include/llvm/CodeGen/PBQP/Math.h

//===- Math.h - PBQP Vector and Matrix classes ------------------*- 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 LLVM_CODEGEN_PBQP_MATH_H
#define LLVM_CODEGEN_PBQP_MATH_H

#include "llvm/ADT/Hashing.h"
#include "llvm/ADT/STLExtras.h"
#include <algorithm>
#include <cassert>
#include <functional>
#include <memory>

namespace llvm {
namespace PBQP {

PBQPNum;

/// PBQP Vector class.
class Vector {};

/// Return a hash_value for the given vector.
inline hash_code hash_value(const Vector &V) {}

/// Output a textual representation of the given vector on the given
///        output stream.
template <typename OStream>
OStream& operator<<(OStream &OS, const Vector &V) {}

/// PBQP Matrix class
class Matrix {};

/// Return a hash_code for the given matrix.
inline hash_code hash_value(const Matrix &M) {}

/// Output a textual representation of the given matrix on the given
///        output stream.
template <typename OStream>
OStream& operator<<(OStream &OS, const Matrix &M) {}

template <typename Metadata>
class MDVector : public Vector {};

template <typename Metadata>
inline hash_code hash_value(const MDVector<Metadata> &V) {}

template <typename Metadata>
class MDMatrix : public Matrix {};

template <typename Metadata>
inline hash_code hash_value(const MDMatrix<Metadata> &M) {}

} // end namespace PBQP
} // end namespace llvm

#endif // LLVM_CODEGEN_PBQP_MATH_H