/* * Copyright (c) 2010-2018 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include namespace Swift { class XMPPLayer; class LowLayer; class StreamLayer; class SWIFTEN_API StreamStack { public: StreamStack(XMPPLayer* xmppLayer, LowLayer* physicalLayer); ~StreamStack(); void addLayer(std::unique_ptr /* streamLayer */); XMPPLayer* getXMPPLayer() const { return xmppLayer_; } template T* getLayer() const { for (const auto& i : layers_) { T* layer = dynamic_cast(i.get()); if (layer) { return layer; } } return nullptr; } private: XMPPLayer* xmppLayer_; LowLayer* physicalLayer_; std::vector> layers_; }; }