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,
108 const NodeData< GUM_SCALAR >& data);
114 template <
typename GUM_SCALAR >
120 EdgeData(
const EdgeData< GUM_SCALAR >& from);
124 PRMInstance< GUM_SCALAR >* u;
128 PRMInstance< GUM_SCALAR >* v;
134 bool operator==(
const EdgeData< GUM_SCALAR >& from)
const;
136 bool operator!=(
const EdgeData< GUM_SCALAR >& from)
const;
145 template <
typename GUM_SCALAR >
146 std::ostream& operator<<(std::ostream& out,
147 const EdgeData< GUM_SCALAR >& data);
165 template <
typename GUM_SCALAR >
166 class InterfaceGraph {
167 friend class gum::prm::GSpan< GUM_SCALAR >;
171 explicit InterfaceGraph(
const PRMSystem< GUM_SCALAR >& sys);
174 InterfaceGraph(
const InterfaceGraph& source);
177 InterfaceGraph& operator=(
const InterfaceGraph& source);
186 const UndiGraph& graph()
const;
190 Bijection< Idx, LabelData* >& labels();
194 const Bijection< Idx, LabelData* >& labels()
const;
197 Size size(
const LabelData* l)
const;
200 Set< NodeData< GUM_SCALAR >* >& nodes(
const LabelData* l);
203 const Set< NodeData< GUM_SCALAR >* >& nodes(
const LabelData* l)
const;
206 Set< EdgeData< GUM_SCALAR >* >& edges(
const LabelData* l);
209 const Set< EdgeData< GUM_SCALAR >* >& edges(
const LabelData* l)
const;
212 LabelData* label(Idx id);
215 NodeId id(
const PRMInstance< GUM_SCALAR >& i)
const;
218 NodeId id(
const PRMInstance< GUM_SCALAR >* i)
const;
222 NodeData< GUM_SCALAR >& node(
const PRMInstance< GUM_SCALAR >* i);
226 const NodeData< GUM_SCALAR >&
227 node(
const PRMInstance< GUM_SCALAR >* i)
const;
231 NodeData< GUM_SCALAR >& node(NodeId id);
235 const NodeData< GUM_SCALAR >& node(NodeId id)
const;
239 EdgeData< GUM_SCALAR >& edge(NodeId u, NodeId v);
243 const EdgeData< GUM_SCALAR >& edge(NodeId u, NodeId v)
const;
248 const PRMSystem< GUM_SCALAR >* sys__;
254 NodeProperty< NodeData< GUM_SCALAR >* > nodes__;
257 HashTable< PRMInstance< GUM_SCALAR >*, NodeId > idMap__;
260 EdgeProperty< EdgeData< GUM_SCALAR >* > edges__;
263 Bijection< Idx, LabelData* >* labels__;
268 HashTable< LabelData*, Set< NodeData< GUM_SCALAR >* >* > nodeMap__;
273 HashTable< LabelData*, Set< EdgeData< GUM_SCALAR >* >* > edgeMap__;
283 void label__(NodeData< GUM_SCALAR >* node,
284 HashTable< std::string, LabelData* >& label_map);
288 void label__(EdgeData< GUM_SCALAR >* edge,
289 HashTable< std::string, LabelData* >& label_map);
293 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 294 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 295 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 296 extern template class NodeData<
double >;
300 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 301 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 302 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 303 extern template class EdgeData<
double >;
307 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 308 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 309 # ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 310 extern template class InterfaceGraph<
double >;
320 #include <agrum/PRM/gspan/interfaceGraph_tpl.h>