Tulip 5.7.1
Large graphs analysis and drawing
Loading...
Searching...
No Matches
Node.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_NODE_H
21#define Tulip_NODE_H
22#include <climits>
23#include <functional>
24
25namespace tlp {
26
27/**
28 * @ingroup Graph
29 * @brief The node struct represents a node in a Graph object.
30 *
31 * This structure only contains an identifier, and a function to check if the node is valid.
32 * A node is considered invalid when its id has the UINT_MAX value.
33 *
34 * Most operations performed on a node (getting out edges etc) are available into the tlp::Graph
35 * object.
36 *
37 * @see tlp::edge
38 * @see tlp::Graph
39 */
40struct node {
41 /**
42 * @brief id The identifier of the node.
43 */
44 unsigned int id;
45
46 /**
47 * @brief node creates an invalid node.
48 */
49 node() : id(UINT_MAX) {}
50
51 /**
52 * @brief node Create a node of given identifier.
53 * It is your responsibility to make sure a node of this ID exists when you create the node.
54 * If you want to make sure this node exists, use Graph::isElement(), as isValid() will only tell
55 * is the node was correctly initialized.
56 *
57 * @param j the identifier this node will use.
58 */
59 explicit node(unsigned int j) : id(j) {}
60
61 /**
62 * @brief operator unsigned int A convenience function to get the id of a node.
63 */
64 operator unsigned int() const {
65 return id;
66 }
67
68 /**
69 * @brief operator != Compares two nodes, checking that they are different..
70 * @param n The other node to compare this one to.
71 * @return Whether or not the two nodes are different.
72 */
73 bool operator!=(const node n) const {
74 return id != n.id;
75 }
76
77 /**
78 * @brief operator != Compares two nodes, checking that they are identical.
79 * @param n The other node to compare this one to.
80 * @return Whether or not the two nodes are the same.
81 */
82 bool operator==(const node n) const {
83 return id == n.id;
84 }
85
86 /**
87 * @brief isValid checks if the node is valid.
88 * An invalid node is a node whose id is UINT_MAX.
89 *
90 * @return whether the node is valid or not.
91 */
92 bool isValid() const {
93 return id != UINT_MAX;
94 }
95};
96} // namespace tlp
97
98#ifdef _MSC_VER
99#include <vector>
100#include <tulip/tulipconf.h>
101// needed by MSVC to avoid multiple definitions
102struct TLP_SCOPE __tlp_vector_node : public std::vector<tlp::node> {};
103#endif
104
105///@cond DOXYGEN_HIDDEN
106// these three functions allow to use tlp::node as a key in a hash-based data structure (e.g.
107// hashmap).
108namespace std {
109template <>
110struct hash<tlp::node> {
111 size_t operator()(const tlp::node n) const {
112 return n.id;
113 }
114};
115template <>
116struct equal_to<tlp::node> {
117 size_t operator()(const tlp::node n, const tlp::node n2) const {
118 return n.id == n2.id;
119 }
120};
121template <>
122struct less<tlp::node> {
123 size_t operator()(const tlp::node n, const tlp::node n2) const {
124 return n.id < n2.id;
125 }
126};
127} // namespace std
128///@endcond
129
130#endif
The node struct represents a node in a Graph object.
Definition: Node.h:40
unsigned int id
id The identifier of the node.
Definition: Node.h:44
bool isValid() const
isValid checks if the node is valid. An invalid node is a node whose id is UINT_MAX.
Definition: Node.h:92
bool operator==(const node n) const
operator != Compares two nodes, checking that they are identical.
Definition: Node.h:82
node(unsigned int j)
node Create a node of given identifier. It is your responsibility to make sure a node of this ID exis...
Definition: Node.h:59
bool operator!=(const node n) const
operator != Compares two nodes, checking that they are different..
Definition: Node.h:73
node()
node creates an invalid node.
Definition: Node.h:49