| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_COMPILER_NODE_H_ | 5 #ifndef V8_COMPILER_NODE_H_ |
| 6 #define V8_COMPILER_NODE_H_ | 6 #define V8_COMPILER_NODE_H_ |
| 7 | 7 |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 friend class Node::UseEdges::iterator; | 271 friend class Node::UseEdges::iterator; |
| 272 friend class Node::InputEdges::iterator; | 272 friend class Node::InputEdges::iterator; |
| 273 | 273 |
| 274 explicit Edge(Node::Input* input) : input_(input) {} | 274 explicit Edge(Node::Input* input) : input_(input) {} |
| 275 | 275 |
| 276 Node::Input* input_; | 276 Node::Input* input_; |
| 277 }; | 277 }; |
| 278 | 278 |
| 279 | 279 |
| 280 // A forward iterator to visit the edges for the input dependencies of a node.. | 280 // A forward iterator to visit the edges for the input dependencies of a node.. |
| 281 class Node::InputEdges::iterator { | 281 class Node::InputEdges::iterator FINAL { |
| 282 public: | 282 public: |
| 283 typedef std::forward_iterator_tag iterator_category; | 283 typedef std::forward_iterator_tag iterator_category; |
| 284 typedef int difference_type; | 284 typedef ptrdiff_t difference_type; |
| 285 typedef Edge value_type; | 285 typedef Edge value_type; |
| 286 typedef Edge* pointer; | 286 typedef Edge* pointer; |
| 287 typedef Edge& reference; | 287 typedef Edge& reference; |
| 288 iterator(const Node::InputEdges::iterator& other) // NOLINT | 288 iterator(const Node::InputEdges::iterator& other) // NOLINT |
| 289 : input_(other.input_) {} | 289 : input_(other.input_) {} |
| 290 iterator() : input_(NULL) {} | 290 iterator() : input_(nullptr) {} |
| 291 | 291 |
| 292 Edge operator*() const { return Edge(input_); } | 292 Edge operator*() const { return Edge(input_); } |
| 293 bool operator==(const iterator& other) const { return Equals(other); } | 293 bool operator==(const iterator& other) const { return Equals(other); } |
| 294 bool operator!=(const iterator& other) const { return !Equals(other); } | 294 bool operator!=(const iterator& other) const { return !Equals(other); } |
| 295 iterator& operator+=(difference_type n) { |
| 296 DCHECK_NOT_NULL(input_); |
| 297 Edge const edge(input_); |
| 298 SetInput(edge.from(), input_->use->input_index + n); |
| 299 return *this; |
| 300 } |
| 295 iterator& operator++() { | 301 iterator& operator++() { |
| 296 DCHECK(input_ != NULL); | 302 (*this) += 1; |
| 297 Edge edge(input_); | |
| 298 Node* from = edge.from(); | |
| 299 SetInput(from, input_->use->input_index + 1); | |
| 300 return *this; | 303 return *this; |
| 301 } | 304 } |
| 305 iterator operator+(difference_type n) const { |
| 306 iterator result(*this); |
| 307 result += n; |
| 308 return result; |
| 309 } |
| 302 iterator operator++(int) { | 310 iterator operator++(int) { |
| 303 iterator result(*this); | 311 iterator result(*this); |
| 304 ++(*this); | 312 ++(*this); |
| 305 return result; | 313 return result; |
| 306 } | 314 } |
| 307 | 315 |
| 308 private: | 316 private: |
| 309 friend class Node; | 317 friend class Node; |
| 310 | 318 |
| 311 explicit iterator(Node* from, int index = 0) : input_(NULL) { | 319 explicit iterator(Node* from, difference_type index = 0) { |
| 312 SetInput(from, index); | 320 SetInput(from, index); |
| 313 } | 321 } |
| 314 | 322 |
| 315 bool Equals(const iterator& other) const { return other.input_ == input_; } | 323 bool Equals(const iterator& other) const { return other.input_ == input_; } |
| 316 void SetInput(Node* from, int index) { | 324 void SetInput(Node* from, difference_type index) { |
| 317 DCHECK(index >= 0 && index <= from->InputCount()); | 325 DCHECK(index >= 0 && index <= from->InputCount()); |
| 318 if (index < from->InputCount()) { | 326 if (index < from->InputCount()) { |
| 319 input_ = from->GetInputRecordPtr(index); | 327 input_ = from->GetInputRecordPtr(static_cast<int>(index)); |
| 320 } else { | 328 } else { |
| 321 input_ = NULL; | 329 input_ = nullptr; |
| 322 } | 330 } |
| 323 } | 331 } |
| 324 | 332 |
| 325 Input* input_; | 333 Input* input_; |
| 326 }; | 334 }; |
| 327 | 335 |
| 328 | 336 |
| 329 // A forward iterator to visit the inputs of a node. | 337 // A forward iterator to visit the inputs of a node. |
| 330 class Node::Inputs::iterator { | 338 class Node::Inputs::iterator FINAL { |
| 331 public: | 339 public: |
| 332 typedef std::forward_iterator_tag iterator_category; | 340 typedef std::forward_iterator_tag iterator_category; |
| 333 typedef int difference_type; | 341 typedef ptrdiff_t difference_type; |
| 334 typedef Node* value_type; | 342 typedef Node* value_type; |
| 335 typedef Node** pointer; | 343 typedef Node** pointer; |
| 336 typedef Node*& reference; | 344 typedef Node*& reference; |
| 337 | 345 |
| 338 iterator(const Node::Inputs::iterator& other) // NOLINT | 346 iterator(const Node::Inputs::iterator& other) // NOLINT |
| 339 : iter_(other.iter_) {} | 347 : iter_(other.iter_) {} |
| 340 | 348 |
| 341 Node* operator*() const { return (*iter_).to(); } | 349 Node* operator*() const { return (*iter_).to(); } |
| 342 bool operator==(const iterator& other) const { return Equals(other); } | 350 bool operator==(const iterator& other) const { return Equals(other); } |
| 343 bool operator!=(const iterator& other) const { return !Equals(other); } | 351 bool operator!=(const iterator& other) const { return !Equals(other); } |
| 352 iterator& operator+=(difference_type n) { |
| 353 iter_ += n; |
| 354 return *this; |
| 355 } |
| 344 iterator& operator++() { | 356 iterator& operator++() { |
| 345 ++iter_; | 357 ++iter_; |
| 346 return *this; | 358 return *this; |
| 347 } | 359 } |
| 360 iterator operator+(difference_type n) const { |
| 361 iterator result(*this); |
| 362 result += n; |
| 363 return result; |
| 364 } |
| 348 iterator operator++(int) { | 365 iterator operator++(int) { |
| 349 iterator result(*this); | 366 iterator result(*this); |
| 350 ++(*this); | 367 ++(*this); |
| 351 return result; | 368 return result; |
| 352 } | 369 } |
| 353 | 370 |
| 354 | 371 |
| 355 private: | 372 private: |
| 356 friend class Node::Inputs; | 373 friend class Node::Inputs; |
| 357 | 374 |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 652 inline bool Node::OwnedBy(Node* owner) const { | 669 inline bool Node::OwnedBy(Node* owner) const { |
| 653 return first_use_ != NULL && first_use_->from == owner && | 670 return first_use_ != NULL && first_use_->from == owner && |
| 654 first_use_->next == NULL; | 671 first_use_->next == NULL; |
| 655 } | 672 } |
| 656 | 673 |
| 657 } // namespace compiler | 674 } // namespace compiler |
| 658 } // namespace internal | 675 } // namespace internal |
| 659 } // namespace v8 | 676 } // namespace v8 |
| 660 | 677 |
| 661 #endif // V8_COMPILER_NODE_H_ | 678 #endif // V8_COMPILER_NODE_H_ |
| OLD | NEW |