//===-- Solution.h ------- PBQP Solution -----------------------*- C++ --*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // Annotated PBQP Graph class. This class is used internally by the PBQP solver // to cache information to speed up reduction. // //===----------------------------------------------------------------------===// #ifndef LLVM_CODEGEN_PBQP_SOLUTION_H #define LLVM_CODEGEN_PBQP_SOLUTION_H #include "PBQPMath.h" namespace PBQP { class Solution { friend class SolverImplementation; private: std::vector selections; PBQPNum solutionCost; bool provedOptimal; unsigned r0Reductions, r1Reductions, r2Reductions, rNReductions; public: Solution() : solutionCost(0.0), provedOptimal(false), r0Reductions(0), r1Reductions(0), r2Reductions(0), rNReductions(0) {} Solution(unsigned length, bool assumeOptimal) : selections(length), solutionCost(0.0), provedOptimal(assumeOptimal), r0Reductions(0), r1Reductions(0), r2Reductions(0), rNReductions(0) {} void setProvedOptimal(bool provedOptimal) { this->provedOptimal = provedOptimal; } void setSelection(unsigned nodeID, unsigned selection) { selections[nodeID] = selection; } void setSolutionCost(PBQPNum solutionCost) { this->solutionCost = solutionCost; } void incR0Reductions() { ++r0Reductions; } void incR1Reductions() { ++r1Reductions; } void incR2Reductions() { ++r2Reductions; } void incRNReductions() { ++rNReductions; } unsigned numNodes() const { return selections.size(); } unsigned getSelection(unsigned nodeID) const { return selections[nodeID]; } PBQPNum getCost() const { return solutionCost; } bool isProvedOptimal() const { return provedOptimal; } unsigned getR0Reductions() const { return r0Reductions; } unsigned getR1Reductions() const { return r1Reductions; } unsigned getR2Reductions() const { return r2Reductions; } unsigned getRNReductions() const { return rNReductions; } bool operator==(const Solution &other) const { return (selections == other.selections); } bool operator!=(const Solution &other) const { return !(*this == other); } }; } #endif // LLVM_CODEGEN_PBQP_SOLUTION_H