| 377 | } |
| 378 | |
| 379 | class Range { |
| 380 | friend class Vector; |
| 381 | T *cur_, *end_; |
| 382 | Range(T *cur, T *end) : cur_(cur), end_(end) {} |
| 383 | public: |
| 384 | Range() {} |
| 385 | bool empty() const { return cur_ == end_; } |
| 386 | size_t remain() const { return end_ - cur_; } |
| 387 | T &front() const { return *cur_; } |
| 388 | void popFront() { JS_ASSERT(!empty()); ++cur_; } |
| 389 | T popCopyFront() { JS_ASSERT(!empty()); return *cur_++; } |
| 390 | }; |
| 391 | |
| 392 | Range all() { |
| 393 | return Range(begin(), end()); |