1 //===- Solution.h - PBQP Solution -------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // PBQP Solution class.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_CODEGEN_PBQP_SOLUTION_H
15 #define LLVM_CODEGEN_PBQP_SOLUTION_H
16 
17 #include "llvm/CodeGen/PBQP/Graph.h"
18 #include <cassert>
19 #include <map>
20 
21 namespace llvm {
22 namespace PBQP {
23 
24   /// Represents a solution to a PBQP problem.
25   ///
26   /// To get the selection for each node in the problem use the getSelection method.
27   class Solution {
28   private:
29     using SelectionsMap = std::map<GraphBase::NodeId, unsigned>;
30     SelectionsMap selections;
31 
32   public:
33     /// Initialise an empty solution.
34     Solution() = default;
35 
36     /// Set the selection for a given node.
37     /// @param nodeId Node id.
38     /// @param selection Selection for nodeId.
setSelection(GraphBase::NodeId nodeId,unsigned selection)39     void setSelection(GraphBase::NodeId nodeId, unsigned selection) {
40       selections[nodeId] = selection;
41     }
42 
43     /// Get a node's selection.
44     /// @param nodeId Node id.
45     /// @return The selection for nodeId;
getSelection(GraphBase::NodeId nodeId)46     unsigned getSelection(GraphBase::NodeId nodeId) const {
47       SelectionsMap::const_iterator sItr = selections.find(nodeId);
48       assert(sItr != selections.end() && "No selection for node.");
49       return sItr->second;
50     }
51   };
52 
53 } // end namespace PBQP
54 } // end namespace llvm
55 
56 #endif // LLVM_CODEGEN_PBQP_SOLUTION_H
57