cpu: Timebuf const accessors
authorAndrew Bardsley <Andrew.Bardsley@arm.com>
Fri, 9 May 2014 22:58:47 +0000 (18:58 -0400)
committerAndrew Bardsley <Andrew.Bardsley@arm.com>
Fri, 9 May 2014 22:58:47 +0000 (18:58 -0400)
Add const accessors for timebuf elements.

src/cpu/timebuf.hh

index b6f709d719472b92458ac4a63c2bd7b59bdd50d4..e93fe0e795300745515c265161f95916a8d8175f 100644 (file)
@@ -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);