Changes in src/ResolvExpr/Alternative.h [fd642d2:4a161bec]
- File:
-
- 1 edited
-
src/ResolvExpr/Alternative.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/Alternative.h
rfd642d2 r4a161bec 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sat May 16 23:45:43 2015 11 // Last Modified By : Aaron B. Moss12 // Last Modified On : Thu Oct 11 10:55:00 201813 // Update Count : 411 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Jul 22 09:36:36 2017 13 // Update Count : 3 14 14 // 15 15 … … 20 20 21 21 #include "Cost.h" // for Cost 22 #include "TypeEnvironment.h" // for TypeEnvironment, AssertionSetValue 23 24 #include "Common/utility.h" // for maybeClone 22 #include "TypeEnvironment.h" // for TypeEnvironment 25 23 26 24 class Expression; 27 25 28 26 namespace ResolvExpr { 29 /// One assertion to resolve30 struct AssertionItem {31 const DeclarationWithType* decl;32 AssertionSetValue info;33 34 AssertionItem() = default;35 AssertionItem( const DeclarationWithType* decl, const AssertionSetValue& info )36 : decl(decl), info(info) {}37 AssertionItem( const AssertionSet::value_type& e ) : decl(e.first), info(e.second) {}38 operator AssertionSet::value_type () const { return { decl, info }; }39 40 // to support cloneAll41 AssertionItem clone() const { return { maybeClone(decl), info }; }42 };43 /// A list of unresolved assertions44 using AssertionList = std::vector<AssertionItem>;45 46 /// Clones an assertion list into an assertion set47 static inline void cloneAll( const AssertionList& src, AssertionSet& dst ) {48 for ( const AssertionItem& item : src ) {49 dst.emplace( maybeClone(item.decl), item.info );50 }51 }52 53 /// Clones an assertion set into an assertion list54 static inline void cloneAll( const AssertionSet& src, AssertionList& dst ) {55 dst.reserve( dst.size() + src.size() );56 for ( const auto& entry : src ) {57 dst.emplace_back( maybeClone(entry.first), entry.second );58 }59 }60 61 /// Clones an assertion list into an assertion list62 static inline void cloneAll( const AssertionList& src, AssertionList& dst ) {63 dst.reserve( dst.size() + src.size() );64 for ( const AssertionItem& item : src ) {65 dst.emplace_back( maybeClone(item.decl), item.info );66 }67 }68 69 /// One option for resolution of an expression70 27 struct Alternative { 71 28 Alternative(); 72 Alternative( Expression *expr, const TypeEnvironment &env ); 73 Alternative( const Alternative &o, Expression *expr, const Cost &cost ); 74 Alternative( Expression *expr, const TypeEnvironment &env, const OpenVarSet& openVars, 75 const AssertionList& need, const Cost &cost ); 76 Alternative( Expression *expr, const TypeEnvironment &env, const OpenVarSet& openVars, 77 const AssertionList& need, const Cost &cost, const Cost &cvtCost ); 78 Alternative( Expression *expr, const TypeEnvironment &env, const OpenVarSet &openVars, 79 const AssertionSet &need, const Cost &cost); 80 Alternative( Expression *expr, const TypeEnvironment &env, const OpenVarSet &openVars, 81 const AssertionSet &need, const Cost &cost, const Cost& cvtCost ); 82 Alternative( Expression *expr, TypeEnvironment &&env, OpenVarSet &&openVars, 83 AssertionSet &&need, const Cost &cost ); 84 Alternative( Expression *expr, TypeEnvironment &&env, OpenVarSet &&openVars, 85 AssertionSet &&need, const Cost &cost, const Cost &cvtCost ); 29 Alternative( Expression *expr, const TypeEnvironment &env, const Cost &cost ); 30 Alternative( Expression *expr, const TypeEnvironment &env, const Cost &cost, const Cost &cvtCost ); 86 31 Alternative( const Alternative &other ); 87 32 Alternative &operator=( const Alternative &other ); … … 99 44 } 100 45 101 /// Sorts by cost 102 bool operator< ( const Alternative& o ) const { return cost < o.cost; } 103 104 Cost cost; ///< Cost of the whole expression 105 Cost cvtCost; ///< Cost of conversions to the satisfying expression 106 Expression *expr; ///< Satisfying expression 107 TypeEnvironment env; ///< Containing type environment 108 OpenVarSet openVars; ///< Open variables for environment 109 AssertionList need; ///< Assertions which need to be resolved 46 Cost cost; 47 Cost cvtCost; 48 Expression *expr; 49 TypeEnvironment env; 110 50 }; 111 51 112 52 typedef std::vector< Alternative > AltList; 53 54 /// Moves all elements from src to the end of dst 55 void splice( AltList& dst, AltList& src ); 56 57 /// Moves all elements from src to the beginning of dst 58 void spliceBegin( AltList& dst, AltList& src ); 113 59 114 60 static inline std::ostream & operator<<(std::ostream & os, const ResolvExpr::Alternative & alt) {
Note:
See TracChangeset
for help on using the changeset viewer.