diff options
author | Karsten Heimrich <karsten.heimrich@theqtcompany.com> | 2015-07-14 13:52:28 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@theqtcompany.com> | 2015-07-14 12:37:58 +0000 |
commit | de8b7ede25558e0cd97cf3cfea039158b71ad8e2 (patch) | |
tree | f221be7dfbec5c32b86169db960b3cad16727a44 /src/libs/kdtools/genericfactory.cpp | |
parent | 7530807cb040224a2ed31e290ed6f2fb7fc75574 (diff) |
Rename files. Remove {kd} prefix. Remove {kdupdater} prefix.
Change-Id: I88c93cab718f4659296d5f7f562beefd747a366f
Reviewed-by: Jarek Kobus <jaroslaw.kobus@theqtcompany.com>
Diffstat (limited to 'src/libs/kdtools/genericfactory.cpp')
-rw-r--r-- | src/libs/kdtools/genericfactory.cpp | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/libs/kdtools/genericfactory.cpp b/src/libs/kdtools/genericfactory.cpp new file mode 100644 index 000000000..f38cec31a --- /dev/null +++ b/src/libs/kdtools/genericfactory.cpp @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Klaralvdalens Datakonsult AB (KDAB) +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Installer Framework. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "genericfactory.h" + +/*! + \inmodule kdupdater + \class KDGenericFactory + \brief The KDGenericFactory class implements a template-based generic factory. + + KDGenericFactory is an implementation of the factory pattern. It can be used to produce + instances of different classes having a common superclass \c BASE. The user of the factory + registers those producible classes in the factory by using the identifier \c IDENTIFIER. That + identifier can then be used to produce as many instances of the registered product as the + user wants. + + One factory instance is able to produce instances of different types of DERIVED classes only + when the constructor of DERIVED or the registered generator function have a common signature + for all DERIVED classes. This signature is described by the declaration order of ARGUMENTS. It + is referred to as SIGNATURE in the following paragraphs. + + If a class derived from BASE does not contain a SIGNATURE matching the registered one for the + constructor or the generator function, it is not possible to create instances of it using one + instance of KDGenericFactory subclass. In that case, more than one KDGenericFactory subclass + and instance are needed. + + It is possible to register a subclass of BASE inside an instance of KDGenericFactory subclass + using the registerProduct() function. At least one of the following conditions needs to be met: + + \list + \li A global or static function with SIGNATURE exists. + \li The DERIVED class has a constructor with SIGNATURE. + \li The DERIVED class has a static function with SIGNATURE. + \endlist + + To get a new instance of DERIVED, one needs to call the create() function. The value of + IDENTIFIER determines the product's subclass registered in the factory, while the values + of SIGNATURE are the actual arguments passed to the class constructor or the registered + generator function. +*/ + +/*! + \fn KDGenericFactory::KDGenericFactory() + + Creates the generic factory. +*/ + +/*! + \fn KDGenericFactory::~KDGenericFactory() + + Destroys the generic factory. +*/ + +/*! + \typedef KDGenericFactory::FactoryFunction + + This typedef defines a factory function producing an object of type BASE. +*/ + +/*! + \fn void KDGenericFactory::registerProduct(const IDENTIFIER &id) + + Registers a type DERIVED, identified by \a id in the factory. Any type with the same id gets + unregistered. +*/ + +/*! + \overload + \fn void KDGenericFactory::registerProduct(const IDENTIFIER &id, FactoryFunction func) + + Registers a function \a func that can create the type DERIVED, identified by \a id in the + factory. Any type with the same id gets unregistered. +*/ + +/*! + \fn bool KDGenericFactory::containsProduct(const IDENTIFIER &id) const + + Returns \c true if the factory contains a type with the \a id; otherwise returns false. +*/ + +/*! + \fn BASE *KDGenericFactory::create(const IDENTIFIER &id, ARGUMENTS... args) const + + Creates and returns the type identified by \a id, but automatically upcasted to BASE. Ownership + of the type is transferred to the caller. +*/ |