361 } |
361 } |
362 Node* last_out(DUIterator_Last i) const { return *i; } |
362 Node* last_out(DUIterator_Last i) const { return *i; } |
363 #endif |
363 #endif |
364 |
364 |
365 // Reference to the i'th input Node. Error if out of bounds. |
365 // Reference to the i'th input Node. Error if out of bounds. |
366 Node* in(uint i) const { assert(i < _max, err_msg("oob: i=%d, _max=%d", i, _max)); return _in[i]; } |
366 Node* in(uint i) const { assert(i < _max, err_msg_res("oob: i=%d, _max=%d", i, _max)); return _in[i]; } |
367 // Reference to the i'th output Node. Error if out of bounds. |
367 // Reference to the i'th output Node. Error if out of bounds. |
368 // Use this accessor sparingly. We are going trying to use iterators instead. |
368 // Use this accessor sparingly. We are going trying to use iterators instead. |
369 Node* raw_out(uint i) const { assert(i < _outcnt,"oob"); return _out[i]; } |
369 Node* raw_out(uint i) const { assert(i < _outcnt,"oob"); return _out[i]; } |
370 // Return the unique out edge. |
370 // Return the unique out edge. |
371 Node* unique_out() const { assert(_outcnt==1,"not unique"); return _out[0]; } |
371 Node* unique_out() const { assert(_outcnt==1,"not unique"); return _out[0]; } |
392 void add_req_batch( Node* n, uint m ); // Append m NEW required inputs (all n). |
392 void add_req_batch( Node* n, uint m ); // Append m NEW required inputs (all n). |
393 void del_req( uint idx ); // Delete required edge & compact |
393 void del_req( uint idx ); // Delete required edge & compact |
394 void ins_req( uint i, Node *n ); // Insert a NEW required input |
394 void ins_req( uint i, Node *n ); // Insert a NEW required input |
395 void set_req( uint i, Node *n ) { |
395 void set_req( uint i, Node *n ) { |
396 assert( is_not_dead(n), "can not use dead node"); |
396 assert( is_not_dead(n), "can not use dead node"); |
397 assert( i < _cnt, err_msg("oob: i=%d, _cnt=%d", i, _cnt)); |
397 assert( i < _cnt, err_msg_res("oob: i=%d, _cnt=%d", i, _cnt)); |
398 assert( !VerifyHashTableKeys || _hash_lock == 0, |
398 assert( !VerifyHashTableKeys || _hash_lock == 0, |
399 "remove node from hash table before modifying it"); |
399 "remove node from hash table before modifying it"); |
400 Node** p = &_in[i]; // cache this._in, across the del_out call |
400 Node** p = &_in[i]; // cache this._in, across the del_out call |
401 if (*p != NULL) (*p)->del_out((Node *)this); |
401 if (*p != NULL) (*p)->del_out((Node *)this); |
402 (*p) = n; |
402 (*p) = n; |