20 #ifndef MINMAXPROPERTY_H
21 #define MINMAXPROPERTY_H
23 #include <unordered_map>
25 #include <tulip/Observable.h>
26 #include <tulip/AbstractProperty.h>
28 #define MINMAX_PAIR(TYPE) std::pair<typename TYPE::RealType, typename TYPE::RealType>
29 #define MINMAX_MAP(TYPE) typename std::unordered_map<unsigned int, MINMAX_PAIR(TYPE)>
31 #define NODE_VALUE typename nodeType::RealType
32 #define CONST_NODE_VALUE typename tlp::StoredType<typename nodeType::RealType>::ReturnedConstValue
33 #define EDGE_VALUE typename edgeType::RealType
34 #define CONST_EDGE_VALUE typename tlp::StoredType<typename edgeType::RealType>::ReturnedConstValue
45 template <
typename nodeType,
typename edgeType,
typename propType = PropertyInterface>
48 const MINMAX_PAIR(nodeType) & getNodeMinMax(
const Graph *graph =
nullptr);
49 const MINMAX_PAIR(edgeType) & getEdgeMinMax(
const Graph *graph =
nullptr);
63 EDGE_VALUE EdgeMin, EDGE_VALUE EdgeMax);
77 return getNodeMinMax(graph).first;
89 return getNodeMinMax(graph).second;
101 return getEdgeMinMax(graph).first;
113 return getEdgeMinMax(graph).second;
152 MINMAX_MAP(nodeType) minMaxNode;
153 MINMAX_MAP(edgeType) minMaxEdge;
161 bool needGraphListener;
163 const MINMAX_PAIR(nodeType) & computeMinMaxNode(
const Graph *graph);
164 const MINMAX_PAIR(edgeType) & computeMinMaxEdge(
const Graph *graph);
165 void removeListenersAndClearNodeMap();
166 void removeListenersAndClearEdgeMap();
170 #include "cxx/minmaxproperty.cxx"
This class extends upon PropertyInterface, and adds type-safe methods to get and set the node and edg...
Event is the base class for all events used in the Observation mechanism.
Abstracts the computation of minimal and maximal values on node and edge values of properties.
void updateNodeValue(tlp::node n, CONST_NODE_VALUE newValue)
Updates the value on a node, and updates the minimal/maximal cached values if necessary....
MinMaxProperty(tlp::Graph *graph, const std::string &name, NODE_VALUE NodeMin, NODE_VALUE NodeMax, EDGE_VALUE EdgeMin, EDGE_VALUE EdgeMax)
Constructs a MinMaxProperty.
void updateEdgeValue(tlp::edge e, CONST_EDGE_VALUE newValue)
Updates the value on an edge, and updates the minimal/maximal cached values if necessary....
void updateAllEdgesValues(CONST_EDGE_VALUE newValue)
Updates the value of all edges, setting the maximum and minimum values to this. Should be called by s...
void treatEvent(const tlp::Event &ev) override
This function is called when events are sent to the Listeners, and Listeners only.
CONST_EDGE_VALUE getEdgeMax(const Graph *graph=nullptr)
Computes the maximum value on the edges. It is only computed if it has never been retrieved before,...
void updateAllNodesValues(CONST_NODE_VALUE newValue)
Updates the value of all nodes, setting the maximum and minimum values to this. Should be called by s...
CONST_NODE_VALUE getNodeMin(const Graph *graph=nullptr)
Gets the minimum value on the nodes. It is only computed if it has never been retrieved before,...
CONST_NODE_VALUE getNodeMax(const Graph *graph=nullptr)
Computes the maximum value on the nodes. It is only computed if it has never been retrieved before,...
CONST_EDGE_VALUE getEdgeMin(const Graph *graph=nullptr)
Computes the minimum value on the edges. It is only computed if it has never been retrieved before,...
The edge struct represents an edge in a Graph object.
The node struct represents a node in a Graph object.