28 #ifndef GUM_INTERFACE_GRAPH_H 29 #define GUM_INTERFACE_GRAPH_H 35 #include <agrum/PRM/PRM.h> 36 #include <agrum/tools/core/hashTable.h> 37 #include <agrum/tools/graphs/undiGraph.h> 41 template <
typename GUM_SCALAR >
54 LabelData(
const LabelData& from);
64 bool operator==(
const LabelData& from)
const;
66 bool operator!=(
const LabelData& from)
const;
75 std::ostream& operator<<(std::ostream& out,
const LabelData& data);
81 template <
typename GUM_SCALAR >
85 NodeData< GUM_SCALAR >();
87 NodeData< GUM_SCALAR >(
const NodeData< GUM_SCALAR >& from);
89 ~NodeData< GUM_SCALAR >();
91 PRMInstance< GUM_SCALAR >* n;
95 bool operator==(
const NodeData< GUM_SCALAR >& from)
const;
97 bool operator!=(
const NodeData< GUM_SCALAR >& from)
const;
106 template <
typename GUM_SCALAR >
107 std::ostream& operator<<(std::ostream& out,
const NodeData< GUM_SCALAR >& data);
113 template <
typename GUM_SCALAR >
119 EdgeData(
const EdgeData< GUM_SCALAR >& from);
123 PRMInstance< GUM_SCALAR >* u;
127 PRMInstance< GUM_SCALAR >* v;
133 bool operator==(
const EdgeData< GUM_SCALAR >& from)
const;
135 bool operator!=(
const EdgeData< GUM_SCALAR >& from)
const;
144 template <
typename GUM_SCALAR >
145 std::ostream& operator<<(std::ostream& out,
const EdgeData< GUM_SCALAR >& data);
163 template <
typename GUM_SCALAR >
164 class InterfaceGraph {
165 friend class gum::prm::GSpan< GUM_SCALAR >;
169 explicit InterfaceGraph(
const PRMSystem< GUM_SCALAR >& sys);
172 InterfaceGraph(
const InterfaceGraph& source);
175 InterfaceGraph& operator=(
const InterfaceGraph& source);
184 const UndiGraph& graph()
const;
188 Bijection< Idx, LabelData* >& labels();
192 const Bijection< Idx, LabelData* >& labels()
const;
195 Size size(
const LabelData* l)
const;
198 Set< NodeData< GUM_SCALAR >* >& nodes(
const LabelData* l);
201 const Set< NodeData< GUM_SCALAR >* >& nodes(
const LabelData* l)
const;
204 Set< EdgeData< GUM_SCALAR >* >& edges(
const LabelData* l);
207 const Set< EdgeData< GUM_SCALAR >* >& edges(
const LabelData* l)
const;
210 LabelData* label(Idx id);
213 NodeId id(
const PRMInstance< GUM_SCALAR >& i)
const;
216 NodeId id(
const PRMInstance< GUM_SCALAR >* i)
const;
220 NodeData< GUM_SCALAR >& node(
const PRMInstance< GUM_SCALAR >* i);
224 const NodeData< GUM_SCALAR >& node(
const PRMInstance< GUM_SCALAR >* i)
const;
228 NodeData< GUM_SCALAR >& node(NodeId id);
232 const NodeData< GUM_SCALAR >& node(NodeId id)
const;
236 EdgeData< GUM_SCALAR >& edge(NodeId u, NodeId v);
240 const EdgeData< GUM_SCALAR >& edge(NodeId u, NodeId v)
const;
245 const PRMSystem< GUM_SCALAR >* _sys_;
251 NodeProperty< NodeData< GUM_SCALAR >* > _nodes_;
254 HashTable< PRMInstance< GUM_SCALAR >*, NodeId > _idMap_;
257 EdgeProperty< EdgeData< GUM_SCALAR >* > _edges_;
260 Bijection< Idx, LabelData* >* _labels_;
265 HashTable< LabelData*, Set< NodeData< GUM_SCALAR >* >* > _nodeMap_;
270 HashTable< LabelData*, Set< EdgeData< GUM_SCALAR >* >* > _edgeMap_;
280 void _label_(NodeData< GUM_SCALAR >* node, HashTable< std::string, LabelData* >& label_map);
284 void _label_(EdgeData< GUM_SCALAR >* edge, HashTable< std::string, LabelData* >& label_map);
288 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 289 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 290 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 291 extern template class NodeData<
double >;
295 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 296 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 297 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 298 extern template class EdgeData<
double >;
302 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 303 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 304 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 305 extern template class InterfaceGraph<
double >;
315 #include <agrum/PRM/gspan/interfaceGraph_tpl.h>