summaryrefslogtreecommitdiff
path: root/src/mem/packet.hh
diff options
context:
space:
mode:
authorAndreas Hansson <andreas.hansson@arm.com>2014-12-02 06:07:38 -0500
committerAndreas Hansson <andreas.hansson@arm.com>2014-12-02 06:07:38 -0500
commit0706a252031b3f160bac65fac00b22f8a5ebf4f9 (patch)
tree7f34dd2ef0a6d19fa5f5e1e43268d0be9a0963bb /src/mem/packet.hh
parent9779ba2e37a753df407b976fc4b299d936ea62b8 (diff)
downloadgem5-0706a252031b3f160bac65fac00b22f8a5ebf4f9.tar.xz
mem: Use const pointers for port proxy write functions
This patch changes the various write functions in the port proxies to use const pointers for all sources (similar to how memcpy works). The one unfortunate aspect is the need for a const_cast in the packet, to avoid having to juggle a const and a non-const data pointer. This design decision can always be re-evaluated at a later stage.
Diffstat (limited to 'src/mem/packet.hh')
-rw-r--r--src/mem/packet.hh17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/mem/packet.hh b/src/mem/packet.hh
index fea9dbaae..b540ef6ca 100644
--- a/src/mem/packet.hh
+++ b/src/mem/packet.hh
@@ -814,6 +814,23 @@ class Packet : public Printable
}
/**
+ * Set the data pointer to the following value that should not be
+ * freed. This version of the function allows the pointer passed
+ * to us to be const. To avoid issues down the line we cast the
+ * constness away, the alternative would be to keep both a const
+ * and non-const data pointer and cleverly choose between
+ * them. Note that this is only allowed for static data.
+ */
+ template <typename T>
+ void
+ dataStaticConst(const T *p)
+ {
+ assert(flags.noneSet(STATIC_DATA|DYNAMIC_DATA|ARRAY_DATA));
+ data = const_cast<PacketDataPtr>(p);
+ flags.set(STATIC_DATA);
+ }
+
+ /**
* Set the data pointer to a value that should have delete []
* called on it.
*/