Tulip  5.2.1
Large graphs analysis and drawing
WithDependency.h
1 /*
2  *
3  * This file is part of Tulip (http://tulip.labri.fr)
4  *
5  * Authors: David Auber and the Tulip development Team
6  * from LaBRI, University of Bordeaux
7  *
8  * Tulip is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License
10  * as published by the Free Software Foundation, either version 3
11  * of the License, or (at your option) any later version.
12  *
13  * Tulip is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16  * See the GNU General Public License for more details.
17  *
18  */
19 
20 #ifndef _TULIPWITHDEPENDENCY
21 #define _TULIPWITHDEPENDENCY
22 
23 #include <list>
24 #include <string>
25 #include <typeinfo>
26 #include <tulip/tulipconf.h>
27 
28 namespace tlp {
29 
30 /**
31  * @ingroup Plugins
32  *
33  * @brief Represents a plugin's dependency to another plugin.
34  * In addition to maganing plugin registration, Tulip also handles a dependency mechanism between
35  * plugins.
36  * Every Tulip plugin inherits from the tlp::WithDependency interface which allows to declare that
37  * another plugin should be loaded in order for this plugin to run.
38  * When declaring a dependency, a plugin state the name and the version of the dependecy. This is
39  * done by calling tlp::WithDependency::addDependency()
40  *
41  * @see tlp::WithDependency
42  */
43 struct Dependency {
44  /**
45  * @brief The name of the plug-in, as registered in the Tulip plug-in system.
46  */
47  std::string pluginName;
48  /**
49  * @brief The required version of the plug-in.
50  */
51  std::string pluginRelease;
52 
53  /**
54  * @brief Constructs a new dependency.
55  *
56  * @param pName The name of the plug-in, as registered in the Tulip plug-in system.
57  * @param pRelease The required version of the plug-in.
58  */
59  Dependency(std::string pName, std::string pRelease)
60  : pluginName(pName), pluginRelease(pRelease) {}
61 };
62 
63 /**
64  * @ingroup Plugins
65  * @brief Describes the dependencies of a plug-in on other plug-ins, identified by their name and
66  * their version number.
67  *
68  * This allows to have a plug-in inner workings depend on other plug-ins without linking them
69  * statically, or hoping depended plug-in will be there.
70  */
72 protected:
73  /**
74  * @brief The inner list of dependencies.
75  */
76  std::list<Dependency> _dependencies;
77 
78 public:
79  /**
80  * @brief Adds a dependency upon another plug-in.
81  *
82  * @param factory The type name of the plug-in (e.g. 'DoubleAlgorithm')
83  * @param name The name of the plug-in, as registered in the Tulip plug-in system.
84  * @param release The required version of the depended plug-in.
85  */
86  void addDependency(const char *name, const char *release) {
87  _dependencies.push_back(Dependency(name, release));
88  }
89 
90  /**
91  * @brief Gets the list of Dependencies of this plug-in.
92  *
93  * @return list<Dependency> The list of dependencies of this plug-in.
94  */
95  const std::list<Dependency> &dependencies() const {
96  return _dependencies;
97  }
98 };
99 } // namespace tlp
100 #endif
Represents a plugin&#39;s dependency to another plugin. In addition to maganing plugin registration...
Dependency(std::string pName, std::string pRelease)
Constructs a new dependency.
Describes the dependencies of a plug-in on other plug-ins, identified by their name and their version...
const std::list< Dependency > & dependencies() const
Gets the list of Dependencies of this plug-in.
std::string pluginName
The name of the plug-in, as registered in the Tulip plug-in system.
void addDependency(const char *name, const char *release)
Adds a dependency upon another plug-in.
std::list< Dependency > _dependencies
The inner list of dependencies.
std::string pluginRelease
The required version of the plug-in.