241 ///\ref PredMap type. |
241 ///\ref PredMap type. |
242 /// |
242 /// |
243 ///\ref named-templ-param "Named parameter" for setting |
243 ///\ref named-templ-param "Named parameter" for setting |
244 ///\ref PredMap type. |
244 ///\ref PredMap type. |
245 template <class T> |
245 template <class T> |
246 struct DefPredMap : public Bfs< Digraph, DefPredMapTraits<T> > { |
246 struct SetPredMap : public Bfs< Digraph, SetPredMapTraits<T> > { |
247 typedef Bfs< Digraph, DefPredMapTraits<T> > Create; |
247 typedef Bfs< Digraph, SetPredMapTraits<T> > Create; |
248 }; |
248 }; |
249 |
249 |
250 template <class T> |
250 template <class T> |
251 struct DefDistMapTraits : public Traits { |
251 struct SetDistMapTraits : public Traits { |
252 typedef T DistMap; |
252 typedef T DistMap; |
253 static DistMap *createDistMap(const Digraph &) |
253 static DistMap *createDistMap(const Digraph &) |
254 { |
254 { |
255 throw UninitializedParameter(); |
255 throw UninitializedParameter(); |
256 } |
256 } |
259 ///\ref DistMap type. |
259 ///\ref DistMap type. |
260 /// |
260 /// |
261 ///\ref named-templ-param "Named parameter" for setting |
261 ///\ref named-templ-param "Named parameter" for setting |
262 ///\ref DistMap type. |
262 ///\ref DistMap type. |
263 template <class T> |
263 template <class T> |
264 struct DefDistMap : public Bfs< Digraph, DefDistMapTraits<T> > { |
264 struct SetDistMap : public Bfs< Digraph, SetDistMapTraits<T> > { |
265 typedef Bfs< Digraph, DefDistMapTraits<T> > Create; |
265 typedef Bfs< Digraph, SetDistMapTraits<T> > Create; |
266 }; |
266 }; |
267 |
267 |
268 template <class T> |
268 template <class T> |
269 struct DefReachedMapTraits : public Traits { |
269 struct SetReachedMapTraits : public Traits { |
270 typedef T ReachedMap; |
270 typedef T ReachedMap; |
271 static ReachedMap *createReachedMap(const Digraph &) |
271 static ReachedMap *createReachedMap(const Digraph &) |
272 { |
272 { |
273 throw UninitializedParameter(); |
273 throw UninitializedParameter(); |
274 } |
274 } |
277 ///\ref ReachedMap type. |
277 ///\ref ReachedMap type. |
278 /// |
278 /// |
279 ///\ref named-templ-param "Named parameter" for setting |
279 ///\ref named-templ-param "Named parameter" for setting |
280 ///\ref ReachedMap type. |
280 ///\ref ReachedMap type. |
281 template <class T> |
281 template <class T> |
282 struct DefReachedMap : public Bfs< Digraph, DefReachedMapTraits<T> > { |
282 struct SetReachedMap : public Bfs< Digraph, SetReachedMapTraits<T> > { |
283 typedef Bfs< Digraph, DefReachedMapTraits<T> > Create; |
283 typedef Bfs< Digraph, SetReachedMapTraits<T> > Create; |
284 }; |
284 }; |
285 |
285 |
286 template <class T> |
286 template <class T> |
287 struct DefProcessedMapTraits : public Traits { |
287 struct SetProcessedMapTraits : public Traits { |
288 typedef T ProcessedMap; |
288 typedef T ProcessedMap; |
289 static ProcessedMap *createProcessedMap(const Digraph &) |
289 static ProcessedMap *createProcessedMap(const Digraph &) |
290 { |
290 { |
291 throw UninitializedParameter(); |
291 throw UninitializedParameter(); |
292 } |
292 } |
295 ///\ref ProcessedMap type. |
295 ///\ref ProcessedMap type. |
296 /// |
296 /// |
297 ///\ref named-templ-param "Named parameter" for setting |
297 ///\ref named-templ-param "Named parameter" for setting |
298 ///\ref ProcessedMap type. |
298 ///\ref ProcessedMap type. |
299 template <class T> |
299 template <class T> |
300 struct DefProcessedMap : public Bfs< Digraph, DefProcessedMapTraits<T> > { |
300 struct SetProcessedMap : public Bfs< Digraph, SetProcessedMapTraits<T> > { |
301 typedef Bfs< Digraph, DefProcessedMapTraits<T> > Create; |
301 typedef Bfs< Digraph, SetProcessedMapTraits<T> > Create; |
302 }; |
302 }; |
303 |
303 |
304 struct DefDigraphProcessedMapTraits : public Traits { |
304 struct SetStandardProcessedMapTraits : public Traits { |
305 typedef typename Digraph::template NodeMap<bool> ProcessedMap; |
305 typedef typename Digraph::template NodeMap<bool> ProcessedMap; |
306 static ProcessedMap *createProcessedMap(const Digraph &g) |
306 static ProcessedMap *createProcessedMap(const Digraph &g) |
307 { |
307 { |
308 return new ProcessedMap(g); |
308 return new ProcessedMap(g); |
309 } |
309 } |
312 ///\ref ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. |
312 ///\ref ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. |
313 /// |
313 /// |
314 ///\ref named-templ-param "Named parameter" for setting |
314 ///\ref named-templ-param "Named parameter" for setting |
315 ///\ref ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. |
315 ///\ref ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. |
316 ///If you don't set it explicitly, it will be automatically allocated. |
316 ///If you don't set it explicitly, it will be automatically allocated. |
317 template <class T> |
317 struct SetStandardProcessedMap : |
318 struct DefProcessedMapToBeDefaultMap : |
318 public Bfs< Digraph, SetStandardProcessedMapTraits > { |
319 public Bfs< Digraph, DefDigraphProcessedMapTraits> { |
319 typedef Bfs< Digraph, SetStandardProcessedMapTraits > Create; |
320 typedef Bfs< Digraph, DefDigraphProcessedMapTraits> Create; |
|
321 }; |
320 }; |
322 |
321 |
323 ///@} |
322 ///@} |
324 |
323 |
325 public: |
324 public: |
1063 Base::_source=s; |
1062 Base::_source=s; |
1064 return *this; |
1063 return *this; |
1065 } |
1064 } |
1066 |
1065 |
1067 template<class T> |
1066 template<class T> |
1068 struct DefPredMapBase : public Base { |
1067 struct SetPredMapBase : public Base { |
1069 typedef T PredMap; |
1068 typedef T PredMap; |
1070 static PredMap *createPredMap(const Digraph &) { return 0; }; |
1069 static PredMap *createPredMap(const Digraph &) { return 0; }; |
1071 DefPredMapBase(const TR &b) : TR(b) {} |
1070 SetPredMapBase(const TR &b) : TR(b) {} |
1072 }; |
1071 }; |
1073 ///\brief \ref named-templ-param "Named parameter" |
1072 ///\brief \ref named-templ-param "Named parameter" |
1074 ///for setting \ref PredMap object. |
1073 ///for setting \ref PredMap object. |
1075 /// |
1074 /// |
1076 /// \ref named-templ-param "Named parameter" |
1075 /// \ref named-templ-param "Named parameter" |
1077 ///for setting \ref PredMap object. |
1076 ///for setting \ref PredMap object. |
1078 template<class T> |
1077 template<class T> |
1079 BfsWizard<DefPredMapBase<T> > predMap(const T &t) |
1078 BfsWizard<SetPredMapBase<T> > predMap(const T &t) |
1080 { |
1079 { |
1081 Base::_pred=reinterpret_cast<void*>(const_cast<T*>(&t)); |
1080 Base::_pred=reinterpret_cast<void*>(const_cast<T*>(&t)); |
1082 return BfsWizard<DefPredMapBase<T> >(*this); |
1081 return BfsWizard<SetPredMapBase<T> >(*this); |
1083 } |
1082 } |
1084 |
1083 |
1085 template<class T> |
1084 template<class T> |
1086 struct DefReachedMapBase : public Base { |
1085 struct SetReachedMapBase : public Base { |
1087 typedef T ReachedMap; |
1086 typedef T ReachedMap; |
1088 static ReachedMap *createReachedMap(const Digraph &) { return 0; }; |
1087 static ReachedMap *createReachedMap(const Digraph &) { return 0; }; |
1089 DefReachedMapBase(const TR &b) : TR(b) {} |
1088 SetReachedMapBase(const TR &b) : TR(b) {} |
1090 }; |
1089 }; |
1091 ///\brief \ref named-templ-param "Named parameter" |
1090 ///\brief \ref named-templ-param "Named parameter" |
1092 ///for setting \ref ReachedMap object. |
1091 ///for setting \ref ReachedMap object. |
1093 /// |
1092 /// |
1094 /// \ref named-templ-param "Named parameter" |
1093 /// \ref named-templ-param "Named parameter" |
1095 ///for setting \ref ReachedMap object. |
1094 ///for setting \ref ReachedMap object. |
1096 template<class T> |
1095 template<class T> |
1097 BfsWizard<DefReachedMapBase<T> > reachedMap(const T &t) |
1096 BfsWizard<SetReachedMapBase<T> > reachedMap(const T &t) |
1098 { |
1097 { |
1099 Base::_reached=reinterpret_cast<void*>(const_cast<T*>(&t)); |
1098 Base::_reached=reinterpret_cast<void*>(const_cast<T*>(&t)); |
1100 return BfsWizard<DefReachedMapBase<T> >(*this); |
1099 return BfsWizard<SetReachedMapBase<T> >(*this); |
1101 } |
1100 } |
1102 |
1101 |
1103 template<class T> |
1102 template<class T> |
1104 struct DefProcessedMapBase : public Base { |
1103 struct SetProcessedMapBase : public Base { |
1105 typedef T ProcessedMap; |
1104 typedef T ProcessedMap; |
1106 static ProcessedMap *createProcessedMap(const Digraph &) { return 0; }; |
1105 static ProcessedMap *createProcessedMap(const Digraph &) { return 0; }; |
1107 DefProcessedMapBase(const TR &b) : TR(b) {} |
1106 SetProcessedMapBase(const TR &b) : TR(b) {} |
1108 }; |
1107 }; |
1109 ///\brief \ref named-templ-param "Named parameter" |
1108 ///\brief \ref named-templ-param "Named parameter" |
1110 ///for setting \ref ProcessedMap object. |
1109 ///for setting \ref ProcessedMap object. |
1111 /// |
1110 /// |
1112 /// \ref named-templ-param "Named parameter" |
1111 /// \ref named-templ-param "Named parameter" |
1113 ///for setting \ref ProcessedMap object. |
1112 ///for setting \ref ProcessedMap object. |
1114 template<class T> |
1113 template<class T> |
1115 BfsWizard<DefProcessedMapBase<T> > processedMap(const T &t) |
1114 BfsWizard<SetProcessedMapBase<T> > processedMap(const T &t) |
1116 { |
1115 { |
1117 Base::_processed=reinterpret_cast<void*>(const_cast<T*>(&t)); |
1116 Base::_processed=reinterpret_cast<void*>(const_cast<T*>(&t)); |
1118 return BfsWizard<DefProcessedMapBase<T> >(*this); |
1117 return BfsWizard<SetProcessedMapBase<T> >(*this); |
1119 } |
1118 } |
1120 |
1119 |
1121 template<class T> |
1120 template<class T> |
1122 struct DefDistMapBase : public Base { |
1121 struct SetDistMapBase : public Base { |
1123 typedef T DistMap; |
1122 typedef T DistMap; |
1124 static DistMap *createDistMap(const Digraph &) { return 0; }; |
1123 static DistMap *createDistMap(const Digraph &) { return 0; }; |
1125 DefDistMapBase(const TR &b) : TR(b) {} |
1124 SetDistMapBase(const TR &b) : TR(b) {} |
1126 }; |
1125 }; |
1127 ///\brief \ref named-templ-param "Named parameter" |
1126 ///\brief \ref named-templ-param "Named parameter" |
1128 ///for setting \ref DistMap object. |
1127 ///for setting \ref DistMap object. |
1129 /// |
1128 /// |
1130 /// \ref named-templ-param "Named parameter" |
1129 /// \ref named-templ-param "Named parameter" |
1131 ///for setting \ref DistMap object. |
1130 ///for setting \ref DistMap object. |
1132 template<class T> |
1131 template<class T> |
1133 BfsWizard<DefDistMapBase<T> > distMap(const T &t) |
1132 BfsWizard<SetDistMapBase<T> > distMap(const T &t) |
1134 { |
1133 { |
1135 Base::_dist=reinterpret_cast<void*>(const_cast<T*>(&t)); |
1134 Base::_dist=reinterpret_cast<void*>(const_cast<T*>(&t)); |
1136 return BfsWizard<DefDistMapBase<T> >(*this); |
1135 return BfsWizard<SetDistMapBase<T> >(*this); |
1137 } |
1136 } |
1138 |
1137 |
1139 }; |
1138 }; |
1140 |
1139 |
1141 ///Function type interface for Bfs algorithm. |
1140 ///Function type interface for Bfs algorithm. |
1347 |
1346 |
1348 /// \name Named template parameters |
1347 /// \name Named template parameters |
1349 |
1348 |
1350 ///@{ |
1349 ///@{ |
1351 template <class T> |
1350 template <class T> |
1352 struct DefReachedMapTraits : public Traits { |
1351 struct SetReachedMapTraits : public Traits { |
1353 typedef T ReachedMap; |
1352 typedef T ReachedMap; |
1354 static ReachedMap *createReachedMap(const Digraph &digraph) { |
1353 static ReachedMap *createReachedMap(const Digraph &digraph) { |
1355 throw UninitializedParameter(); |
1354 throw UninitializedParameter(); |
1356 } |
1355 } |
1357 }; |
1356 }; |
1358 /// \brief \ref named-templ-param "Named parameter" for setting |
1357 /// \brief \ref named-templ-param "Named parameter" for setting |
1359 /// ReachedMap type. |
1358 /// ReachedMap type. |
1360 /// |
1359 /// |
1361 /// \ref named-templ-param "Named parameter" for setting ReachedMap type. |
1360 /// \ref named-templ-param "Named parameter" for setting ReachedMap type. |
1362 template <class T> |
1361 template <class T> |
1363 struct DefReachedMap : public BfsVisit< Digraph, Visitor, |
1362 struct SetReachedMap : public BfsVisit< Digraph, Visitor, |
1364 DefReachedMapTraits<T> > { |
1363 SetReachedMapTraits<T> > { |
1365 typedef BfsVisit< Digraph, Visitor, DefReachedMapTraits<T> > Create; |
1364 typedef BfsVisit< Digraph, Visitor, SetReachedMapTraits<T> > Create; |
1366 }; |
1365 }; |
1367 ///@} |
1366 ///@} |
1368 |
1367 |
1369 public: |
1368 public: |
1370 |
1369 |