summaryrefslogtreecommitdiff
path: root/src/base/statistics.hh
diff options
context:
space:
mode:
authorAndreas Hansson <andreas.hansson@arm.com>2014-10-16 05:49:48 -0400
committerAndreas Hansson <andreas.hansson@arm.com>2014-10-16 05:49:48 -0400
commitacdfcad30de8dcf59515b688a1310ba2c1ca6947 (patch)
treefe9f3b7466928c00291b0f843fcf75eb37f2c55a /src/base/statistics.hh
parent8b789ae451aa0b756b4e192629c78c3bcea34cdd (diff)
downloadgem5-acdfcad30de8dcf59515b688a1310ba2c1ca6947.tar.xz
base: Use shared_ptr for stat Node
This patch transitions the stat Node and its derived classes from the ad-hoc RefCountingPtr to the c++11 shared_ptr. There are no changes in behaviour, and the code modifications are mainly replacing "new" with "make_shared".
Diffstat (limited to 'src/base/statistics.hh')
-rw-r--r--src/base/statistics.hh28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/base/statistics.hh b/src/base/statistics.hh
index f4b12e847..658652f05 100644
--- a/src/base/statistics.hh
+++ b/src/base/statistics.hh
@@ -57,6 +57,7 @@
#include <iosfwd>
#include <list>
#include <map>
+#include <memory>
#include <string>
#include <vector>
@@ -66,7 +67,6 @@
#include "base/cast.hh"
#include "base/cprintf.hh"
#include "base/intmath.hh"
-#include "base/refcnt.hh"
#include "base/str.hh"
#include "base/types.hh"
@@ -2050,7 +2050,7 @@ class DistProxy
* Base class for formula statistic node. These nodes are used to build a tree
* that represents the formula.
*/
-class Node : public RefCounted
+class Node
{
public:
/**
@@ -2075,8 +2075,8 @@ class Node : public RefCounted
virtual std::string str() const = 0;
};
-/** Reference counting pointer to a function Node. */
-typedef RefCountingPtr<Node> NodePtr;
+/** Shared pointer to a function Node. */
+typedef std::shared_ptr<Node> NodePtr;
class ScalarStatNode : public Node
{
@@ -2989,7 +2989,9 @@ class Temp
* Copy the given pointer to this class.
* @param n A pointer to a Node object to copy.
*/
- Temp(NodePtr n) : node(n) { }
+ Temp(const NodePtr &n) : node(n) { }
+
+ Temp(NodePtr &&n) : node(std::move(n)) { }
/**
* Return the node pointer.
@@ -3155,51 +3157,51 @@ class Temp
inline Temp
operator+(Temp l, Temp r)
{
- return NodePtr(new BinaryNode<std::plus<Result> >(l, r));
+ return Temp(std::make_shared<BinaryNode<std::plus<Result> > >(l, r));
}
inline Temp
operator-(Temp l, Temp r)
{
- return NodePtr(new BinaryNode<std::minus<Result> >(l, r));
+ return Temp(std::make_shared<BinaryNode<std::minus<Result> > >(l, r));
}
inline Temp
operator*(Temp l, Temp r)
{
- return NodePtr(new BinaryNode<std::multiplies<Result> >(l, r));
+ return Temp(std::make_shared<BinaryNode<std::multiplies<Result> > >(l, r));
}
inline Temp
operator/(Temp l, Temp r)
{
- return NodePtr(new BinaryNode<std::divides<Result> >(l, r));
+ return Temp(std::make_shared<BinaryNode<std::divides<Result> > >(l, r));
}
inline Temp
operator-(Temp l)
{
- return NodePtr(new UnaryNode<std::negate<Result> >(l));
+ return Temp(std::make_shared<UnaryNode<std::negate<Result> > >(l));
}
template <typename T>
inline Temp
constant(T val)
{
- return NodePtr(new ConstNode<T>(val));
+ return Temp(std::make_shared<ConstNode<T> >(val));
}
template <typename T>
inline Temp
constantVector(T val)
{
- return NodePtr(new ConstVectorNode<T>(val));
+ return Temp(std::make_shared<ConstVectorNode<T> >(val));
}
inline Temp
sum(Temp val)
{
- return NodePtr(new SumNode<std::plus<Result> >(val));
+ return Temp(std::make_shared<SumNode<std::plus<Result> > >(val));
}
/** Dump all statistics data to the registered outputs */