Mercurial > hg > svcore
diff transform/ModelTransformerFactory.h @ 877:b109b88bfa85 tonioni
Callback handler for additional models at end of processing
author | Chris Cannam |
---|---|
date | Wed, 29 Jan 2014 15:58:15 +0000 |
parents | 13803edd513d |
children | a2689db084f4 |
line wrap: on
line diff
--- a/transform/ModelTransformerFactory.h Wed Jan 29 09:31:22 2014 +0000 +++ b/transform/ModelTransformerFactory.h Wed Jan 29 15:58:15 2014 +0000 @@ -70,6 +70,11 @@ size_t startFrame = 0, size_t duration = 0, UserConfigurator *configurator = 0); + + class AdditionalModelHandler { + public: + virtual void moreModelsAvailable(std::vector<Model *> models) = 0; + }; /** * Return the output model resulting from applying the named @@ -82,12 +87,21 @@ * problem occurs, return 0. Set message if there is any error or * warning to report. * + * Some transforms may return additional models at the end of + * processing. (For example, a transform that splits an output + * into multiple one-per-bin models.) If an additionalModelHandler + * is provided here, its moreModelsAvailable method will be called + * when those models become available, and ownership of those + * models will be transferred to the handler. Otherwise (if the + * handler is null) any such models will be discarded. + * * The returned model is owned by the caller and must be deleted * when no longer needed. */ Model *transform(const Transform &transform, const ModelTransformer::Input &input, - QString &message); + QString &message, + AdditionalModelHandler *handler = 0); /** * Return the multiple output models resulting from applying the @@ -105,13 +119,22 @@ * for the given transform, or if some other problem occurs, * return 0. Set message if there is any error or warning to * report. - * + * + * Some transforms may return additional models at the end of + * processing. (For example, a transform that splits an output + * into multiple one-per-bin models.) If an additionalModelHandler + * is provided here, its moreModelsAvailable method will be called + * when those models become available, and ownership of those + * models will be transferred to the handler. Otherwise (if the + * handler is null) any such models will be discarded. + * * The returned models are owned by the caller and must be deleted * when no longer needed. */ std::vector<Model *> transformMultiple(const Transforms &transform, const ModelTransformer::Input &input, - QString &message); + QString &message, + AdditionalModelHandler *handler = 0); protected slots: void transformerFinished(); @@ -128,6 +151,9 @@ typedef std::set<ModelTransformer *> TransformerSet; TransformerSet m_runningTransformers; + typedef std::map<ModelTransformer *, AdditionalModelHandler *> HandlerMap; + HandlerMap m_handlers; + static ModelTransformerFactory *m_instance; };