forked from OSchip/llvm-project
[CallGraph] Use decltype instead of pointer_to_unary_function. NFC.
Reviewers: dblaikie Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D23725 llvm-svn: 279328
This commit is contained in:
parent
6377aa1cb1
commit
7c9cfb5b96
|
@ -413,21 +413,20 @@ template <> struct GraphTraits<CallGraphNode *> {
|
|||
typedef CallGraphNode *NodeRef;
|
||||
|
||||
typedef CallGraphNode::CallRecord CGNPairTy;
|
||||
typedef std::pointer_to_unary_function<CGNPairTy, CallGraphNode *>
|
||||
CGNDerefFun;
|
||||
|
||||
static NodeType *getEntryNode(CallGraphNode *CGN) { return CGN; }
|
||||
|
||||
typedef mapped_iterator<NodeType::iterator, CGNDerefFun> ChildIteratorType;
|
||||
static CallGraphNode *CGNGetValue(CGNPairTy P) { return P.second; }
|
||||
|
||||
typedef mapped_iterator<NodeType::iterator, decltype(&CGNGetValue)>
|
||||
ChildIteratorType;
|
||||
|
||||
static inline ChildIteratorType child_begin(NodeType *N) {
|
||||
return map_iterator(N->begin(), CGNDerefFun(CGNDeref));
|
||||
return ChildIteratorType(N->begin(), &CGNGetValue);
|
||||
}
|
||||
static inline ChildIteratorType child_end(NodeType *N) {
|
||||
return map_iterator(N->end(), CGNDerefFun(CGNDeref));
|
||||
return ChildIteratorType(N->end(), &CGNGetValue);
|
||||
}
|
||||
|
||||
static CallGraphNode *CGNDeref(CGNPairTy P) { return P.second; }
|
||||
};
|
||||
|
||||
template <> struct GraphTraits<const CallGraphNode *> {
|
||||
|
@ -435,22 +434,20 @@ template <> struct GraphTraits<const CallGraphNode *> {
|
|||
typedef const CallGraphNode *NodeRef;
|
||||
|
||||
typedef CallGraphNode::CallRecord CGNPairTy;
|
||||
typedef std::pointer_to_unary_function<CGNPairTy, const CallGraphNode *>
|
||||
CGNDerefFun;
|
||||
|
||||
static NodeType *getEntryNode(const CallGraphNode *CGN) { return CGN; }
|
||||
|
||||
typedef mapped_iterator<NodeType::const_iterator, CGNDerefFun>
|
||||
static const CallGraphNode *CGNGetValue(CGNPairTy P) { return P.second; }
|
||||
|
||||
typedef mapped_iterator<NodeType::const_iterator, decltype(&CGNGetValue)>
|
||||
ChildIteratorType;
|
||||
|
||||
static inline ChildIteratorType child_begin(NodeType *N) {
|
||||
return map_iterator(N->begin(), CGNDerefFun(CGNDeref));
|
||||
return ChildIteratorType(N->begin(), &CGNGetValue);
|
||||
}
|
||||
static inline ChildIteratorType child_end(NodeType *N) {
|
||||
return map_iterator(N->end(), CGNDerefFun(CGNDeref));
|
||||
return ChildIteratorType(N->end(), &CGNGetValue);
|
||||
}
|
||||
|
||||
static const CallGraphNode *CGNDeref(CGNPairTy P) { return P.second; }
|
||||
};
|
||||
|
||||
template <>
|
||||
|
@ -460,19 +457,19 @@ struct GraphTraits<CallGraph *> : public GraphTraits<CallGraphNode *> {
|
|||
}
|
||||
typedef std::pair<const Function *const, std::unique_ptr<CallGraphNode>>
|
||||
PairTy;
|
||||
typedef std::pointer_to_unary_function<const PairTy &, CallGraphNode *>
|
||||
DerefFun;
|
||||
static CallGraphNode *CGGetValuePtr(const PairTy &P) {
|
||||
return P.second.get();
|
||||
}
|
||||
|
||||
// nodes_iterator/begin/end - Allow iteration over all nodes in the graph
|
||||
typedef mapped_iterator<CallGraph::iterator, DerefFun> nodes_iterator;
|
||||
typedef mapped_iterator<CallGraph::iterator, decltype(&CGGetValuePtr)>
|
||||
nodes_iterator;
|
||||
static nodes_iterator nodes_begin(CallGraph *CG) {
|
||||
return map_iterator(CG->begin(), DerefFun(CGdereference));
|
||||
return nodes_iterator(CG->begin(), &CGGetValuePtr);
|
||||
}
|
||||
static nodes_iterator nodes_end(CallGraph *CG) {
|
||||
return map_iterator(CG->end(), DerefFun(CGdereference));
|
||||
return nodes_iterator(CG->end(), &CGGetValuePtr);
|
||||
}
|
||||
|
||||
static CallGraphNode *CGdereference(const PairTy &P) { return P.second.get(); }
|
||||
};
|
||||
|
||||
template <>
|
||||
|
@ -483,20 +480,18 @@ struct GraphTraits<const CallGraph *> : public GraphTraits<
|
|||
}
|
||||
typedef std::pair<const Function *const, std::unique_ptr<CallGraphNode>>
|
||||
PairTy;
|
||||
typedef std::pointer_to_unary_function<const PairTy &, const CallGraphNode *>
|
||||
DerefFun;
|
||||
static const CallGraphNode *CGGetValuePtr(const PairTy &P) {
|
||||
return P.second.get();
|
||||
}
|
||||
|
||||
// nodes_iterator/begin/end - Allow iteration over all nodes in the graph
|
||||
typedef mapped_iterator<CallGraph::const_iterator, DerefFun> nodes_iterator;
|
||||
typedef mapped_iterator<CallGraph::const_iterator, decltype(&CGGetValuePtr)>
|
||||
nodes_iterator;
|
||||
static nodes_iterator nodes_begin(const CallGraph *CG) {
|
||||
return map_iterator(CG->begin(), DerefFun(CGdereference));
|
||||
return nodes_iterator(CG->begin(), &CGGetValuePtr);
|
||||
}
|
||||
static nodes_iterator nodes_end(const CallGraph *CG) {
|
||||
return map_iterator(CG->end(), DerefFun(CGdereference));
|
||||
}
|
||||
|
||||
static const CallGraphNode *CGdereference(const PairTy &P) {
|
||||
return P.second.get();
|
||||
return nodes_iterator(CG->end(), &CGGetValuePtr);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue