diff options
author | Remko Tronçon <git@el-tramo.be> | 2009-07-15 18:07:44 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2009-07-15 18:07:44 (GMT) |
commit | f061668e3c1d5eac01b85303e2c81df2bc560e9a (patch) | |
tree | de56afe6d93cb36425f7c2e458575d27bd9105a4 /Swiften/StreamStack/StreamStack.h | |
parent | 0930cd940963be0edfe7c80b4925babca0e01443 (diff) | |
download | swift-contrib-f061668e3c1d5eac01b85303e2c81df2bc560e9a.zip swift-contrib-f061668e3c1d5eac01b85303e2c81df2bc560e9a.tar.bz2 |
Make stream stack layers reference counted.
Diffstat (limited to 'Swiften/StreamStack/StreamStack.h')
-rw-r--r-- | Swiften/StreamStack/StreamStack.h | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/Swiften/StreamStack/StreamStack.h b/Swiften/StreamStack/StreamStack.h index bc2e89b..87c522d 100644 --- a/Swiften/StreamStack/StreamStack.h +++ b/Swiften/StreamStack/StreamStack.h @@ -1,5 +1,4 @@ -#ifndef SWIFTEN_STREAMSTACK_H -#define SWIFTEN_STREAMSTACK_H +#pragma once #include <boost/shared_ptr.hpp> #include <boost/signal.hpp> @@ -15,31 +14,31 @@ namespace Swift { class StreamStack { public: - StreamStack(XMPPLayer* xmppLayer, LowLayer* physicalLayer); + StreamStack(boost::shared_ptr<XMPPLayer> xmppLayer, boost::shared_ptr<LowLayer> physicalLayer); + ~StreamStack(); - void addLayer(StreamLayer*); + void addLayer(boost::shared_ptr<StreamLayer>); - XMPPLayer* getXMPPLayer() const { + boost::shared_ptr<XMPPLayer> getXMPPLayer() const { return xmppLayer_; } - template<typename T> T* getLayer() { - foreach(StreamLayer* streamLayer, layers_) { - T* layer = dynamic_cast<T*>(streamLayer); + template<typename T> boost::shared_ptr<T> getLayer() { + foreach(const boost::shared_ptr<StreamLayer>& streamLayer, layers_) { + boost::shared_ptr<T> layer = boost::dynamic_pointer_cast<T>(streamLayer); if (layer) { return layer; } } - return 0; + return boost::shared_ptr<T>(); } private: - XMPPLayer* xmppLayer_; - LowLayer* physicalLayer_; - std::vector<StreamLayer*> layers_; + boost::shared_ptr<XMPPLayer> xmppLayer_; + boost::shared_ptr<LowLayer> physicalLayer_; + std::vector< boost::shared_ptr<StreamLayer> > layers_; boost::bsignals::connection xmppReadSlotConnection_; boost::bsignals::connection xmppWriteSignalConnection_; + std::vector< boost::bsignals::connection > writeSignalConnections_; }; } - -#endif |