Tulip 5.7.1
Large graphs analysis and drawing
Loading...
Searching...
No Matches
TemplateAlgorithm.h
1/*
2 *
3 * This file is part of Tulip (https://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 TULIP_PROPERTY_H
21#define TULIP_PROPERTY_H
22
23#include <tulip/Algorithm.h>
24#include <tulip/Graph.h>
25
26#include <sstream>
27
28namespace tlp {
29class PluginContext;
30static const std::string PROPERTY_ALGORITHM_CATEGORY = "Property";
31
32/**
33 * @ingroup Plugins
34 * @brief A non-template interface for tlp::TemplateAlgorithm
35 * @see tlp::TemplateAlgorithm
36 **/
37class TLP_SCOPE PropertyAlgorithm : public tlp::Algorithm {
38public:
39 PropertyAlgorithm(const tlp::PluginContext *context) : Algorithm(context) {}
40 std::string category() const override {
41 return PROPERTY_ALGORITHM_CATEGORY;
42 }
43};
44
45/**
46 * @ingroup Plugins
47 * @brief The TemplateAlgorithm class describes a plugin that can operate on a single graph's
48 * property.
49 * @param Property The property template arguments gives the type of the property the algorithm
50 * operates on.
51 *
52 * A TemplateAlgorithm takes a graph as input (plus additional parameters defined via
53 * tlp::WithParameter) and outputs its results in a tlp::PropertyInterface subclass.
54 * The output property is defined as an output parameter named "result" and as a class member called
55 * result.
56 *
57 * @warning Subclassing TemplateAlgorithm is not recommended since template specifications are
58 * available for every Tulip property types.
59 *
60 * @see tlp::BooleanAlgorithm
61 * @see tlp::StringAlgorithm
62 * @see tlp::DoubleAlgorithm
63 * @see tlp::IntegerAlgorithm
64 * @see tlp::LayoutAlgorithm
65 * @see tlp::SizeAlgorithm
66 */
67template <class Property>
68class TLP_SCOPE TemplateAlgorithm : public PropertyAlgorithm {
69public:
70 Property *result;
72 : tlp::PropertyAlgorithm(context), result(nullptr) {
73 if (dataSet != nullptr) {
74 if (!dataSet->exists("result")) {
75 std::stringstream propname;
76 propname << "result";
77 unsigned number = 0;
78
79 while (graph->existProperty(propname.str())) {
80 propname.clear();
81 propname << "result" << number;
82 ++number;
83 }
84
85 result = graph->getProperty<Property>(propname.str());
86 } else {
87 dataSet->get("result", result);
88 }
89 }
90 }
91};
92} // namespace tlp
93#endif
This abstract class describes a basic algorithm plugin.
Definition: Algorithm.h:46
Contains runtime parameters for a plugin.
Definition: PluginContext.h:42
A non-template interface for tlp::TemplateAlgorithm.
std::string category() const override
A string identifier for a plugin used for categorization purposes.
The TemplateAlgorithm class describes a plugin that can operate on a single graph's property.