From: Andrew Bardsley Date: Fri, 9 May 2014 22:58:47 +0000 (-0400) Subject: cpu: Timebuf const accessors X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8087d2622d4c7c55def5a0f2daec4be951f1929b;p=gem5.git cpu: Timebuf const accessors Add const accessors for timebuf elements. --- 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);