- typedef std::vector<Use>::iterator op_iterator;
- typedef std::vector<Use>::const_iterator const_op_iterator;
-
- void op_reserve(unsigned NumElements) { Operands.reserve(NumElements); }
-
- inline op_iterator op_begin() { return Operands.begin(); }
- inline const_op_iterator op_begin() const { return Operands.begin(); }
- inline op_iterator op_end() { return Operands.end(); }
- inline const_op_iterator op_end() const { return Operands.end(); }
-
- /// op_erase - This method is used to remove one of the arguments from the
- /// operands list. Only use this if you know what you are doing.
- ///
- op_iterator op_erase(op_iterator I) { return Operands.erase(I); }
- op_iterator op_erase(op_iterator I, op_iterator E) {
- return Operands.erase(I, E);
+ typedef Use* op_iterator;
+ typedef const Use* const_op_iterator;
+
+ inline op_iterator op_begin() { return OperandList; }
+ inline const_op_iterator op_begin() const { return OperandList; }
+ inline op_iterator op_end() { return OperandList+NumOperands; }
+ inline const_op_iterator op_end() const { return OperandList+NumOperands; }
+
+ /// Convenience iterator for directly iterating over the Values in the
+ /// OperandList
+ class value_op_iterator : public std::iterator<std::forward_iterator_tag,
+ Value*> {
+ op_iterator OI;
+ public:
+ explicit value_op_iterator(Use *U) : OI(U) {}
+
+ bool operator==(const value_op_iterator &x) const {
+ return OI == x.OI;
+ }
+ bool operator!=(const value_op_iterator &x) const {
+ return !operator==(x);
+ }
+
+ /// Iterator traversal: forward iteration only
+ value_op_iterator &operator++() { // Preincrement
+ ++OI;
+ return *this;
+ }
+ value_op_iterator operator++(int) { // Postincrement
+ value_op_iterator tmp = *this; ++*this; return tmp;
+ }
+
+ /// Retrieve a pointer to the current Value.
+ Value *operator*() const {
+ return *OI;
+ }
+
+ Value *operator->() const { return operator*(); }
+ };
+
+ inline value_op_iterator value_op_begin() {
+ return value_op_iterator(op_begin());
+ }
+ inline value_op_iterator value_op_end() {
+ return value_op_iterator(op_end());