diff options
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/timebuf.hh | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/cpu/timebuf.hh b/src/cpu/timebuf.hh index b6f709d71..e93fe0e79 100644 --- a/src/cpu/timebuf.hh +++ b/src/cpu/timebuf.hh @@ -49,7 +49,7 @@ class TimeBuffer std::vector<char *> index; unsigned base; - void valid(int idx) + void valid(int idx) const { assert (idx >= -past && idx <= future); } @@ -189,7 +189,10 @@ class TimeBuffer new (index[ptr]) T; } - T *access(int idx) + protected: + //Calculate the index into this->index for element at position idx + //relative to now + inline int calculateVectorIndex(int idx) const { //Need more complex math here to calculate index. valid(idx); @@ -201,24 +204,31 @@ class TimeBuffer vector_index += size; } + return vector_index; + } + + public: + T *access(int idx) + { + int vector_index = calculateVectorIndex(idx); + return reinterpret_cast<T *>(index[vector_index]); } T &operator[](int idx) { - //Need more complex math here to calculate index. - valid(idx); - - int vector_index = idx + base; - if (vector_index >= (int)size) { - vector_index -= size; - } else if (vector_index < 0) { - vector_index += size; - } + int vector_index = calculateVectorIndex(idx); return reinterpret_cast<T &>(*index[vector_index]); } + const T &operator[] (int idx) const + { + int vector_index = calculateVectorIndex(idx); + + return reinterpret_cast<const T &>(*index[vector_index]); + } + wire getWire(int idx) { valid(idx); |