summaryrefslogtreecommitdiffstats
path: root/src/libs/kdtools/genericfactory.cpp
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@theqtcompany.com>2015-07-14 13:52:28 +0200
committerKarsten Heimrich <karsten.heimrich@theqtcompany.com>2015-07-14 12:37:58 +0000
commitde8b7ede25558e0cd97cf3cfea039158b71ad8e2 (patch)
treef221be7dfbec5c32b86169db960b3cad16727a44 /src/libs/kdtools/genericfactory.cpp
parent7530807cb040224a2ed31e290ed6f2fb7fc75574 (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.cpp117
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.
+*/