[libc] remove modulo from CircularArrayRef iterator
GitOrigin-RevId: 223a6f94c59c00733763bacc43f5b9458b4cc6f4
diff --git a/benchmarks/LibcBenchmark.h b/benchmarks/LibcBenchmark.h
index 6516e5f..af6173a 100644
--- a/benchmarks/LibcBenchmark.h
+++ b/benchmarks/LibcBenchmark.h
@@ -275,17 +275,21 @@
: public std::iterator<std::input_iterator_tag, T, ssize_t> {
llvm::ArrayRef<T> Array;
size_t Index;
+ size_t Offset;
public:
explicit const_iterator(llvm::ArrayRef<T> Array, size_t Index = 0)
- : Array(Array), Index(Index) {}
+ : Array(Array), Index(Index), Offset(Index % Array.size()) {}
const_iterator &operator++() {
++Index;
+ ++Offset;
+ if (Offset == Array.size())
+ Offset = 0;
return *this;
}
bool operator==(const_iterator Other) const { return Index == Other.Index; }
bool operator!=(const_iterator Other) const { return !(*this == Other); }
- const T &operator*() const { return Array[Index % Array.size()]; }
+ const T &operator*() const { return Array[Offset]; }
};
CircularArrayRef(llvm::ArrayRef<T> Array, size_t Size)