• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_INTERPRETER_BYTECODE_ARRAY_RANDOM_ITERATOR_H_
6 #define V8_INTERPRETER_BYTECODE_ARRAY_RANDOM_ITERATOR_H_
7 
8 #include "src/interpreter/bytecode-array-accessor.h"
9 #include "src/zone/zone-containers.h"
10 #include "src/zone/zone.h"
11 
12 namespace v8 {
13 namespace internal {
14 namespace interpreter {
15 
16 class V8_EXPORT_PRIVATE BytecodeArrayRandomIterator final
17     : public BytecodeArrayAccessor {
18  public:
19   explicit BytecodeArrayRandomIterator(Handle<BytecodeArray> bytecode_array,
20                                        Zone* zone);
21 
22   BytecodeArrayRandomIterator& operator++() {
23     ++current_index_;
24     UpdateOffsetFromIndex();
25     return *this;
26   }
27   BytecodeArrayRandomIterator& operator--() {
28     --current_index_;
29     UpdateOffsetFromIndex();
30     return *this;
31   }
32 
33   BytecodeArrayRandomIterator& operator+=(int offset) {
34     current_index_ += offset;
35     UpdateOffsetFromIndex();
36     return *this;
37   }
38 
39   BytecodeArrayRandomIterator& operator-=(int offset) {
40     current_index_ -= offset;
41     UpdateOffsetFromIndex();
42     return *this;
43   }
44 
current_index()45   int current_index() const { return current_index_; }
46 
size()47   size_t size() const { return offsets_.size(); }
48 
GoToIndex(int index)49   void GoToIndex(int index) {
50     current_index_ = index;
51     UpdateOffsetFromIndex();
52   }
GoToStart()53   void GoToStart() {
54     current_index_ = 0;
55     UpdateOffsetFromIndex();
56   }
GoToEnd()57   void GoToEnd() {
58     DCHECK_LT(offsets_.size() - 1, static_cast<size_t>(INT_MAX));
59     current_index_ = static_cast<int>(offsets_.size() - 1);
60     UpdateOffsetFromIndex();
61   }
62 
63   bool IsValid() const;
64 
65  private:
66   ZoneVector<int> offsets_;
67   int current_index_;
68 
69   void UpdateOffsetFromIndex();
70 
71   DISALLOW_COPY_AND_ASSIGN(BytecodeArrayRandomIterator);
72 };
73 
74 }  // namespace interpreter
75 }  // namespace internal
76 }  // namespace v8
77 
78 #endif  // V8_INTERPRETER_BYTECODE_ARRAY_RANDOM_ITERATOR_H_
79