diff options
author | Andreas Hansson <andreas.hansson@arm.com> | 2014-10-16 05:49:48 -0400 |
---|---|---|
committer | Andreas Hansson <andreas.hansson@arm.com> | 2014-10-16 05:49:48 -0400 |
commit | acdfcad30de8dcf59515b688a1310ba2c1ca6947 (patch) | |
tree | fe9f3b7466928c00291b0f843fcf75eb37f2c55a /src | |
parent | 8b789ae451aa0b756b4e192629c78c3bcea34cdd (diff) | |
download | gem5-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')
-rw-r--r-- | src/base/statistics.hh | 28 |
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 */ |