From 8087d2622d4c7c55def5a0f2daec4be951f1929b Mon Sep 17 00:00:00 2001 From: Andrew Bardsley Date: Fri, 9 May 2014 18:58:47 -0400 Subject: [PATCH] cpu: Timebuf const accessors Add const accessors for timebuf elements. --- src/cpu/timebuf.hh | 32 +++++++++++++++++++++----------- 1 file 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 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(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(*index[vector_index]); } + const T &operator[] (int idx) const + { + int vector_index = calculateVectorIndex(idx); + + return reinterpret_cast(*index[vector_index]); + } + wire getWire(int idx) { valid(idx); -- 2.30.2