/* * 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 HighLayer; class LowLayer; class StreamLayer; class SWIFTEN_API StreamStack { public: StreamStack(std::unique_ptr topLayer, std::unique_ptr bottomLayer); ~StreamStack(); void addLayer(std::unique_ptr /* streamLayer */); HighLayer* getTopLayer() const { return topLayer_.get(); } template T* getLayer() const { for (const auto& i : layers_) { T* layer = dynamic_cast(i.get()); if (layer) { return layer; } } if (T* layer = dynamic_cast(topLayer_.get())) { return layer; } if (T* layer = dynamic_cast(bottomLayer_.get())) { return layer; } return nullptr; } private: std::unique_ptr topLayer_; std::unique_ptr bottomLayer_; std::vector> layers_; }; }