Changeset 258:0310c8984732 in lemon1.2 for lemon/dijkstra.h
 Timestamp:
 09/09/08 21:52:45 (16 years ago)
 Branch:
 default
 Parents:
 257:8d76a7bf9961 (diff), 256:c760d691fe3c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.  Phase:
 public
 Files:

 2 edited
Legend:
 Unmodified
 Added
 Removed

lemon/dijkstra.h
r251 r258 332 332 333 333 template <class T> 334 struct DefPredMapTraits : public Traits {334 struct SetPredMapTraits : public Traits { 335 335 typedef T PredMap; 336 336 static PredMap *createPredMap(const Digraph &) … … 345 345 ///\ref PredMap type. 346 346 template <class T> 347 struct DefPredMap348 : public Dijkstra< Digraph, LengthMap, DefPredMapTraits<T> > {349 typedef Dijkstra< Digraph, LengthMap, DefPredMapTraits<T> > Create;347 struct SetPredMap 348 : public Dijkstra< Digraph, LengthMap, SetPredMapTraits<T> > { 349 typedef Dijkstra< Digraph, LengthMap, SetPredMapTraits<T> > Create; 350 350 }; 351 351 352 352 template <class T> 353 struct DefDistMapTraits : public Traits {353 struct SetDistMapTraits : public Traits { 354 354 typedef T DistMap; 355 355 static DistMap *createDistMap(const Digraph &) … … 364 364 ///\ref DistMap type. 365 365 template <class T> 366 struct DefDistMap367 : public Dijkstra< Digraph, LengthMap, DefDistMapTraits<T> > {368 typedef Dijkstra< Digraph, LengthMap, DefDistMapTraits<T> > Create;366 struct SetDistMap 367 : public Dijkstra< Digraph, LengthMap, SetDistMapTraits<T> > { 368 typedef Dijkstra< Digraph, LengthMap, SetDistMapTraits<T> > Create; 369 369 }; 370 370 371 371 template <class T> 372 struct DefProcessedMapTraits : public Traits {372 struct SetProcessedMapTraits : public Traits { 373 373 typedef T ProcessedMap; 374 374 static ProcessedMap *createProcessedMap(const Digraph &) … … 383 383 ///\ref ProcessedMap type. 384 384 template <class T> 385 struct DefProcessedMap386 : public Dijkstra< Digraph, LengthMap, DefProcessedMapTraits<T> > {387 typedef Dijkstra< Digraph, LengthMap, DefProcessedMapTraits<T> > Create;388 }; 389 390 struct DefDigraphProcessedMapTraits : public Traits {385 struct SetProcessedMap 386 : public Dijkstra< Digraph, LengthMap, SetProcessedMapTraits<T> > { 387 typedef Dijkstra< Digraph, LengthMap, SetProcessedMapTraits<T> > Create; 388 }; 389 390 struct SetStandardProcessedMapTraits : public Traits { 391 391 typedef typename Digraph::template NodeMap<bool> ProcessedMap; 392 392 static ProcessedMap *createProcessedMap(const Digraph &g) … … 401 401 ///\ref ProcessedMap type to be <tt>Digraph::NodeMap<bool></tt>. 402 402 ///If you don't set it explicitly, it will be automatically allocated. 403 template <class T> 404 struct DefProcessedMapToBeDefaultMap 405 : public Dijkstra< Digraph, LengthMap, DefDigraphProcessedMapTraits> { 406 typedef Dijkstra< Digraph, LengthMap, DefDigraphProcessedMapTraits> 403 struct SetStandardProcessedMap 404 : public Dijkstra< Digraph, LengthMap, SetStandardProcessedMapTraits > { 405 typedef Dijkstra< Digraph, LengthMap, SetStandardProcessedMapTraits > 407 406 Create; 408 407 }; 409 408 410 409 template <class H, class CR> 411 struct DefHeapTraits : public Traits {410 struct SetHeapTraits : public Traits { 412 411 typedef CR HeapCrossRef; 413 412 typedef H Heap; … … 426 425 ///reference type. 427 426 template <class H, class CR = typename Digraph::template NodeMap<int> > 428 struct DefHeap429 : public Dijkstra< Digraph, LengthMap, DefHeapTraits<H, CR> > {430 typedef Dijkstra< Digraph, LengthMap, DefHeapTraits<H, CR> > Create;427 struct SetHeap 428 : public Dijkstra< Digraph, LengthMap, SetHeapTraits<H, CR> > { 429 typedef Dijkstra< Digraph, LengthMap, SetHeapTraits<H, CR> > Create; 431 430 }; 432 431 433 432 template <class H, class CR> 434 struct DefStandardHeapTraits : public Traits {433 struct SetStandardHeapTraits : public Traits { 435 434 typedef CR HeapCrossRef; 436 435 typedef H Heap; … … 451 450 ///parameter and the heap's constructor waits for the cross reference. 452 451 template <class H, class CR = typename Digraph::template NodeMap<int> > 453 struct DefStandardHeap454 : public Dijkstra< Digraph, LengthMap, DefStandardHeapTraits<H, CR> > {455 typedef Dijkstra< Digraph, LengthMap, DefStandardHeapTraits<H, CR> >452 struct SetStandardHeap 453 : public Dijkstra< Digraph, LengthMap, SetStandardHeapTraits<H, CR> > { 454 typedef Dijkstra< Digraph, LengthMap, SetStandardHeapTraits<H, CR> > 456 455 Create; 457 456 }; 458 457 459 458 template <class T> 460 struct DefOperationTraitsTraits : public Traits {459 struct SetOperationTraitsTraits : public Traits { 461 460 typedef T OperationTraits; 462 461 }; … … 468 467 ///\ref OperationTraits type. 469 468 template <class T> 470 struct DefOperationTraits471 : public Dijkstra<Digraph, LengthMap, DefOperationTraitsTraits<T> > {472 typedef Dijkstra<Digraph, LengthMap, DefOperationTraitsTraits<T> >469 struct SetOperationTraits 470 : public Dijkstra<Digraph, LengthMap, SetOperationTraitsTraits<T> > { 471 typedef Dijkstra<Digraph, LengthMap, SetOperationTraitsTraits<T> > 473 472 Create; 474 473 }; … … 1206 1205 1207 1206 template<class T> 1208 struct DefPredMapBase : public Base {1207 struct SetPredMapBase : public Base { 1209 1208 typedef T PredMap; 1210 1209 static PredMap *createPredMap(const Digraph &) { return 0; }; 1211 DefPredMapBase(const TR &b) : TR(b) {}1210 SetPredMapBase(const TR &b) : TR(b) {} 1212 1211 }; 1213 1212 ///\brief \ref namedtemplparam "Named parameter" … … 1217 1216 ///for setting \ref PredMap object. 1218 1217 template<class T> 1219 DijkstraWizard< DefPredMapBase<T> > predMap(const T &t)1218 DijkstraWizard<SetPredMapBase<T> > predMap(const T &t) 1220 1219 { 1221 1220 Base::_pred=reinterpret_cast<void*>(const_cast<T*>(&t)); 1222 return DijkstraWizard< DefPredMapBase<T> >(*this);1221 return DijkstraWizard<SetPredMapBase<T> >(*this); 1223 1222 } 1224 1223 1225 1224 template<class T> 1226 struct DefProcessedMapBase : public Base {1225 struct SetProcessedMapBase : public Base { 1227 1226 typedef T ProcessedMap; 1228 1227 static ProcessedMap *createProcessedMap(const Digraph &) { return 0; }; 1229 DefProcessedMapBase(const TR &b) : TR(b) {}1228 SetProcessedMapBase(const TR &b) : TR(b) {} 1230 1229 }; 1231 1230 ///\brief \ref namedtemplparam "Named parameter" … … 1235 1234 ///for setting \ref ProcessedMap object. 1236 1235 template<class T> 1237 DijkstraWizard< DefProcessedMapBase<T> > processedMap(const T &t)1236 DijkstraWizard<SetProcessedMapBase<T> > processedMap(const T &t) 1238 1237 { 1239 1238 Base::_processed=reinterpret_cast<void*>(const_cast<T*>(&t)); 1240 return DijkstraWizard< DefProcessedMapBase<T> >(*this);1239 return DijkstraWizard<SetProcessedMapBase<T> >(*this); 1241 1240 } 1242 1241 1243 1242 template<class T> 1244 struct DefDistMapBase : public Base {1243 struct SetDistMapBase : public Base { 1245 1244 typedef T DistMap; 1246 1245 static DistMap *createDistMap(const Digraph &) { return 0; }; 1247 DefDistMapBase(const TR &b) : TR(b) {}1246 SetDistMapBase(const TR &b) : TR(b) {} 1248 1247 }; 1249 1248 ///\brief \ref namedtemplparam "Named parameter" … … 1253 1252 ///for setting \ref DistMap object. 1254 1253 template<class T> 1255 DijkstraWizard< DefDistMapBase<T> > distMap(const T &t)1254 DijkstraWizard<SetDistMapBase<T> > distMap(const T &t) 1256 1255 { 1257 1256 Base::_dist=reinterpret_cast<void*>(const_cast<T*>(&t)); 1258 return DijkstraWizard< DefDistMapBase<T> >(*this);1257 return DijkstraWizard<SetDistMapBase<T> >(*this); 1259 1258 } 1260 1259 
lemon/dijkstra.h
r257 r258 1068 1068 //Pointer to the length map 1069 1069 void *_length; 1070 //Pointer to the map of processed nodes. 1071 void *_processed; 1070 1072 //Pointer to the map of predecessors arcs. 1071 1073 void *_pred; … … 1080 1082 /// This constructor does not require parameters, therefore it initiates 1081 1083 /// all of the attributes to default values (0, INVALID). 1082 DijkstraWizardBase() : _g(0), _length(0), _pr ed(0),1084 DijkstraWizardBase() : _g(0), _length(0), _processed(0), _pred(0), 1083 1085 _dist(0), _source(INVALID) {} 1084 1086 … … 1094 1096 _g(reinterpret_cast<void*>(const_cast<GR*>(&g))), 1095 1097 _length(reinterpret_cast<void*>(const_cast<LM*>(&l))), 1096 _pr ed(0), _dist(0), _source(s) {}1098 _processed(0), _pred(0), _dist(0), _source(s) {} 1097 1099 1098 1100 }; … … 1173 1175 dij(*reinterpret_cast<const Digraph*>(Base::_g), 1174 1176 *reinterpret_cast<const LengthMap*>(Base::_length)); 1175 if(Base::_pred) dij.predMap(*reinterpret_cast<PredMap*>(Base::_pred)); 1176 if(Base::_dist) dij.distMap(*reinterpret_cast<DistMap*>(Base::_dist)); 1177 if(Base::_processed) 1178 dij.processedMap(*reinterpret_cast<ProcessedMap*>(Base::_processed)); 1179 if(Base::_pred) 1180 dij.predMap(*reinterpret_cast<PredMap*>(Base::_pred)); 1181 if(Base::_dist) 1182 dij.distMap(*reinterpret_cast<DistMap*>(Base::_dist)); 1177 1183 dij.run(Base::_source); 1178 1184 }
Note: See TracChangeset
for help on using the changeset viewer.