summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Farnum <greg@inktank.com>2013-03-26 17:15:53 -0700
committerGreg Farnum <greg@inktank.com>2013-09-19 18:15:00 -0700
commite2f18f95bccca9ebd788bca739fb7f25a67f1d4e (patch)
tree10a72e565b69f07d7e4af4e476ebc383a6026f64
parentf3570ae3a73a0078ccd6684d1e68a970db3ec5a4 (diff)
downloadceph-e2f18f95bccca9ebd788bca739fb7f25a67f1d4e.tar.gz
OpTracker: add a templated CTOp container class which provides some type safetywip-4354
This way we can get some basic type safety by turning our (generic) TrackedOp into one of these. Notice that it requires a MESSAGE_TYPE_ID static member from the Message subclasses...that's coming soon. Signed-off-by: Greg Farnum <greg@inktank.com>
-rw-r--r--src/common/TrackedOp.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/common/TrackedOp.h b/src/common/TrackedOp.h
index 3344301c7c8..12526800156 100644
--- a/src/common/TrackedOp.h
+++ b/src/common/TrackedOp.h
@@ -158,4 +158,17 @@ public:
virtual void dump(utime_t now, Formatter *f) const;
};
+template <typename MessageType>
+class CTOp {
+ TrackedOpRef ref;
+public:
+ CTOp(TrackedOp _ref) :
+ ref(_ref)
+ { assert(MessageType::MESSAGE_TYPE_ID == ref->request->get_type()); }
+ TrackedOp get_op() { return ref; }
+ MessageType * operator*() {
+ return static_cast<MessageType>(ref->request);
+ }
+};
+
#endif