[LCG] Stop playing fast and loose with reference members and assignment.

It doesn't work. I'm still cleaning up all the places where I blindly
followed this pattern. There are more to come in this code too.

As a benefit, this lets the default copy and move operations Just Work.

llvm-svn: 206375
This commit is contained in:
Chandler Carruth 2014-04-16 11:14:28 +00:00
parent 49b568ead8
commit eacd996daf
1 changed files with 4 additions and 11 deletions

View File

@ -119,25 +119,18 @@ public:
/// \brief Nonce type to select the constructor for the end iterator. /// \brief Nonce type to select the constructor for the end iterator.
struct IsAtEndT {}; struct IsAtEndT {};
LazyCallGraph &G; LazyCallGraph *G;
NodeVectorImplT::iterator NI; NodeVectorImplT::iterator NI;
// Build the begin iterator for a node. // Build the begin iterator for a node.
explicit iterator(LazyCallGraph &G, NodeVectorImplT &Nodes) explicit iterator(LazyCallGraph &G, NodeVectorImplT &Nodes)
: G(G), NI(Nodes.begin()) {} : G(&G), NI(Nodes.begin()) {}
// Build the end iterator for a node. This is selected purely by overload. // Build the end iterator for a node. This is selected purely by overload.
iterator(LazyCallGraph &G, NodeVectorImplT &Nodes, IsAtEndT /*Nonce*/) iterator(LazyCallGraph &G, NodeVectorImplT &Nodes, IsAtEndT /*Nonce*/)
: G(G), NI(Nodes.end()) {} : G(&G), NI(Nodes.end()) {}
public: public:
iterator(const iterator &Arg) : G(Arg.G), NI(Arg.NI) {}
iterator(iterator &&Arg) : G(Arg.G), NI(std::move(Arg.NI)) {}
iterator &operator=(iterator Arg) {
std::swap(Arg, *this);
return *this;
}
bool operator==(const iterator &Arg) { return NI == Arg.NI; } bool operator==(const iterator &Arg) { return NI == Arg.NI; }
bool operator!=(const iterator &Arg) { return !operator==(Arg); } bool operator!=(const iterator &Arg) { return !operator==(Arg); }
@ -146,7 +139,7 @@ public:
return NI->get<Node *>(); return NI->get<Node *>();
Function *F = NI->get<Function *>(); Function *F = NI->get<Function *>();
Node *ChildN = G.get(*F); Node *ChildN = G->get(*F);
*NI = ChildN; *NI = ChildN;
return ChildN; return ChildN;
} }