Tulip 5.7.1
Large graphs analysis and drawing
Loading...
Searching...
No Matches
Graph.cxx
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#include <tulip/PluginProgress.h>
20#include <tulip/PropertyInterface.h>
21
22//================================================================================
23template <typename ATTRIBUTETYPE>
24bool tlp::Graph::getAttribute(const std::string &name, ATTRIBUTETYPE &value) const {
25 return getAttributes().get(name, value);
26}
27//================================================================================
28template <typename ATTRIBUTETYPE>
29void tlp::Graph::setAttribute(const std::string &name, const ATTRIBUTETYPE &value) {
30 tlp::DataSet &data = getNonConstAttributes();
31 notifyBeforeSetAttribute(name);
32 data.set(name, value);
33 notifyAfterSetAttribute(name);
34}
35//================================================================================
36template <typename PropertyType>
37PropertyType *tlp::Graph::getLocalProperty(const std::string &name) {
38 if (existLocalProperty(name)) {
39 PropertyInterface *prop = getProperty(name);
40 assert(dynamic_cast<PropertyType *>(prop) != nullptr);
41 return dynamic_cast<PropertyType *>(prop);
42 } else {
43 PropertyType *prop = new PropertyType(this, name);
44 this->addLocalProperty(name, prop);
45 return prop;
46 }
47}
48//====================================================================================
49template <typename PropertyType>
50PropertyType *tlp::Graph::getProperty(const std::string &name) {
51 if (existProperty(name)) {
52 tlp::PropertyInterface *prop = getProperty(name);
53 assert(dynamic_cast<PropertyType *>(prop) != nullptr);
54 return dynamic_cast<PropertyType *>(prop);
55 } else {
56 return getLocalProperty<PropertyType>(name);
57 }
58}
A container that can store data from any type.
Definition: DataSet.h:195
bool get(const std::string &key, T &value) const
Returns the stored value associated with the given key. The stored value is a copy of the original va...
Definition: DataSet.cxx:23
void set(const std::string &key, const T &value)
Stores a copy of the given param, associated with the key. The value must have a well-formed copy con...
Definition: DataSet.cxx:79
const DataSet & getAttributes() const
Gets the attributes of the graph.
Definition: Graph.h:1225
void setAttribute(const std::string &name, const ATTRIBUTETYPE &value)
Sets an attribute on the graph.
Definition: Graph.cxx:29
virtual PropertyInterface * getProperty(const std::string &name) const =0
Gets an existing property. In DEBUG mode an assertion checks the existence of the property.
PropertyType * getLocalProperty(const std::string &name)
Gets a property on this graph. The name of a property identifies it uniquely. Either there already ex...
Definition: Graph.cxx:37
bool getAttribute(const std::string &name, ATTRIBUTETYPE &value) const
Gets an attribute on the graph.
Definition: Graph.cxx:24
PropertyInterface describes the interface of a graph property.