Add constant stat.
authorVilas Sridharan <vilas.sridharan@gmail.com>
Wed, 31 Oct 2007 02:21:05 +0000 (22:21 -0400)
committerVilas Sridharan <vilas.sridharan@gmail.com>
Wed, 31 Oct 2007 02:21:05 +0000 (22:21 -0400)
Signed Off: Ali Saidi <saidi@eecs.umich.edu>

--HG--
extra : convert_revision : 3da9e507117d0279e212d151d78c312fd9cf0b5c

src/base/statistics.hh

index 8d3f53d4cb492e12fe519ec9b2ae6388da2cfe8d..3a859d364e155c9f2d05920926dc11736e4a7324 100644 (file)
@@ -2030,6 +2030,39 @@ class ConstNode : public Node
     virtual std::string str() const { return to_string(vresult[0]); }
 };
 
+template <class T>
+class ConstVectorNode : public Node
+{
+  private:
+    VResult vresult;
+
+  public:
+    ConstVectorNode(const T &s) : vresult(s.begin(), s.end()) {}
+    const VResult &result() const { return vresult; }
+    virtual Result total() const
+    {
+        int size = this->size();
+        Result tmp = 0;
+        for (int i = 0; i < size; i++)
+        {
+            tmp += vresult[i];
+        }
+        return tmp;
+    }
+    virtual size_t size() const { return vresult.size(); }
+    virtual std::string str() const
+    {
+        int size = this->size();
+        std::string tmp = "(";
+        for (int i = 0; i < size; i++)
+        {
+            tmp += csprintf("%s ",to_string(vresult[i]));
+        }
+        tmp += ")";
+        return tmp;
+    }
+};
+
 template <class Op>
 struct OpString;
 
@@ -2888,6 +2921,13 @@ constant(T val)
     return NodePtr(new ConstNode<T>(val));
 }
 
+template <typename T>
+inline Temp
+constantVector(T val)
+{
+    return NodePtr(new ConstVectorNode<T>(val));
+}
+
 inline Temp
 sum(Temp val)
 {