| ... | 
	... | 
	
		@@ -320,69 +320,179 @@
 
	 | 
	| 320 | 
	320 | 
	
		    ConstMap<int, double> cm(2.0);
 
	 | 
	| 321 | 
	321 | 
	
		    IdentityMap<int> im;
 
	 | 
	| 322 | 
	322 | 
	
		    ConvertMap<IdentityMap<int>, double> id(im);
 
	 | 
	| 323 | 
	323 | 
	
		    check(lessMap(id,cm)[1] && !lessMap(id,cm)[2] && !lessMap(id,cm)[3],
 
	 | 
	| 324 | 
	324 | 
	
		          "Something is wrong with LessMap");
 
	 | 
	| 325 | 
	325 | 
	
		    check(!equalMap(id,cm)[1] && equalMap(id,cm)[2] && !equalMap(id,cm)[3],
 
	 | 
	| 326 | 
	326 | 
	
		          "Something is wrong with EqualMap");
 
	 | 
	| 327 | 
	327 | 
	
		  }
 
	 | 
	| 328 | 
	328 | 
	
		
 
	 | 
	| 329 | 
	329 | 
	
		  // LoggerBoolMap
 
	 | 
	| 330 | 
	330 | 
	
		  {
	 | 
	| 331 | 
	331 | 
	
		    typedef std::vector<int> vec;
 
	 | 
	 | 
	332 | 
	
		    checkConcept<WriteMap<int, bool>, LoggerBoolMap<vec::iterator> >();
 
	 | 
	 | 
	333 | 
	
		    checkConcept<WriteMap<int, bool>,
 
	 | 
	 | 
	334 | 
	
		                 LoggerBoolMap<std::back_insert_iterator<vec> > >();
 
	 | 
	 | 
	335 | 
	
		
 
	 | 
	| 332 | 
	336 | 
	
		    vec v1;
 
	 | 
	| 333 | 
	337 | 
	
		    vec v2(10);
 
	 | 
	| 334 | 
	338 | 
	
		    LoggerBoolMap<std::back_insert_iterator<vec> >
 
	 | 
	| 335 | 
	339 | 
	
		      map1(std::back_inserter(v1));
 
	 | 
	| 336 | 
	340 | 
	
		    LoggerBoolMap<vec::iterator> map2(v2.begin());
 
	 | 
	| 337 | 
	341 | 
	
		    map1.set(10, false);
 
	 | 
	| 338 | 
	342 | 
	
		    map1.set(20, true);   map2.set(20, true);
 
	 | 
	| 339 | 
	343 | 
	
		    map1.set(30, false);  map2.set(40, false);
 
	 | 
	| 340 | 
	344 | 
	
		    map1.set(50, true);   map2.set(50, true);
 
	 | 
	| 341 | 
	345 | 
	
		    map1.set(60, true);   map2.set(60, true);
 
	 | 
	| 342 | 
	346 | 
	
		    check(v1.size() == 3 && v2.size() == 10 &&
 
	 | 
	| 343 | 
	347 | 
	
		          v1[0]==20 && v1[1]==50 && v1[2]==60 &&
 
	 | 
	| 344 | 
	348 | 
	
		          v2[0]==20 && v2[1]==50 && v2[2]==60,
 
	 | 
	| 345 | 
	349 | 
	
		          "Something is wrong with LoggerBoolMap");
 
	 | 
	| 346 | 
	350 | 
	
		
 
	 | 
	| 347 | 
	351 | 
	
		    int i = 0;
 
	 | 
	| 348 | 
	352 | 
	
		    for ( LoggerBoolMap<vec::iterator>::Iterator it = map2.begin();
 
	 | 
	| 349 | 
	353 | 
	
		          it != map2.end(); ++it )
 
	 | 
	| 350 | 
	354 | 
	
		      check(v1[i++] == *it, "Something is wrong with LoggerBoolMap");
 
	 | 
	| 351 | 
	355 | 
	
		  }
 
	 | 
	| 352 | 
	356 | 
	
		  
 
	 | 
	 | 
	357 | 
	
		  // IdMap, RangeIdMap
 
	 | 
	 | 
	358 | 
	
		  {
	 | 
	 | 
	359 | 
	
		    typedef ListDigraph Graph;
 
	 | 
	 | 
	360 | 
	
		    DIGRAPH_TYPEDEFS(Graph);
 
	 | 
	 | 
	361 | 
	
		
 
	 | 
	 | 
	362 | 
	
		    checkConcept<ReadMap<Node, int>, IdMap<Graph, Node> >();
 
	 | 
	 | 
	363 | 
	
		    checkConcept<ReadMap<Arc, int>, IdMap<Graph, Arc> >();
 
	 | 
	 | 
	364 | 
	
		    checkConcept<ReadMap<Node, int>, RangeIdMap<Graph, Node> >();
 
	 | 
	 | 
	365 | 
	
		    checkConcept<ReadMap<Arc, int>, RangeIdMap<Graph, Arc> >();
 
	 | 
	 | 
	366 | 
	
		    
 
	 | 
	 | 
	367 | 
	
		    Graph gr;
 
	 | 
	 | 
	368 | 
	
		    IdMap<Graph, Node> nmap(gr);
 
	 | 
	 | 
	369 | 
	
		    IdMap<Graph, Arc> amap(gr);
 
	 | 
	 | 
	370 | 
	
		    RangeIdMap<Graph, Node> nrmap(gr);
 
	 | 
	 | 
	371 | 
	
		    RangeIdMap<Graph, Arc> armap(gr);
 
	 | 
	 | 
	372 | 
	
		    
 
	 | 
	 | 
	373 | 
	
		    Node n0 = gr.addNode();
 
	 | 
	 | 
	374 | 
	
		    Node n1 = gr.addNode();
 
	 | 
	 | 
	375 | 
	
		    Node n2 = gr.addNode();
 
	 | 
	 | 
	376 | 
	
		    
 
	 | 
	 | 
	377 | 
	
		    Arc a0 = gr.addArc(n0, n1);
 
	 | 
	 | 
	378 | 
	
		    Arc a1 = gr.addArc(n0, n2);
 
	 | 
	 | 
	379 | 
	
		    Arc a2 = gr.addArc(n2, n1);
 
	 | 
	 | 
	380 | 
	
		    Arc a3 = gr.addArc(n2, n0);
 
	 | 
	 | 
	381 | 
	
		    
 
	 | 
	 | 
	382 | 
	
		    check(nmap[n0] == gr.id(n0) && nmap(gr.id(n0)) == n0, "Wrong IdMap");
 
	 | 
	 | 
	383 | 
	
		    check(nmap[n1] == gr.id(n1) && nmap(gr.id(n1)) == n1, "Wrong IdMap");
 
	 | 
	 | 
	384 | 
	
		    check(nmap[n2] == gr.id(n2) && nmap(gr.id(n2)) == n2, "Wrong IdMap");
 
	 | 
	 | 
	385 | 
	
		
 
	 | 
	 | 
	386 | 
	
		    check(amap[a0] == gr.id(a0) && amap(gr.id(a0)) == a0, "Wrong IdMap");
 
	 | 
	 | 
	387 | 
	
		    check(amap[a1] == gr.id(a1) && amap(gr.id(a1)) == a1, "Wrong IdMap");
 
	 | 
	 | 
	388 | 
	
		    check(amap[a2] == gr.id(a2) && amap(gr.id(a2)) == a2, "Wrong IdMap");
 
	 | 
	 | 
	389 | 
	
		    check(amap[a3] == gr.id(a3) && amap(gr.id(a3)) == a3, "Wrong IdMap");
 
	 | 
	 | 
	390 | 
	
		
 
	 | 
	 | 
	391 | 
	
		    check(nmap.inverse()[gr.id(n0)] == n0, "Wrong IdMap::InverseMap");
 
	 | 
	 | 
	392 | 
	
		    check(amap.inverse()[gr.id(a0)] == a0, "Wrong IdMap::InverseMap");
 
	 | 
	 | 
	393 | 
	
		    
 
	 | 
	 | 
	394 | 
	
		    check(nrmap.size() == 3 && armap.size() == 4,
 
	 | 
	 | 
	395 | 
	
		          "Wrong RangeIdMap::size()");
 
	 | 
	 | 
	396 | 
	
		
 
	 | 
	 | 
	397 | 
	
		    check(nrmap[n0] == 0 && nrmap(0) == n0, "Wrong RangeIdMap");
 
	 | 
	 | 
	398 | 
	
		    check(nrmap[n1] == 1 && nrmap(1) == n1, "Wrong RangeIdMap");
 
	 | 
	 | 
	399 | 
	
		    check(nrmap[n2] == 2 && nrmap(2) == n2, "Wrong RangeIdMap");
 
	 | 
	 | 
	400 | 
	
		    
 
	 | 
	 | 
	401 | 
	
		    check(armap[a0] == 0 && armap(0) == a0, "Wrong RangeIdMap");
 
	 | 
	 | 
	402 | 
	
		    check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap");
 
	 | 
	 | 
	403 | 
	
		    check(armap[a2] == 2 && armap(2) == a2, "Wrong RangeIdMap");
 
	 | 
	 | 
	404 | 
	
		    check(armap[a3] == 3 && armap(3) == a3, "Wrong RangeIdMap");
 
	 | 
	 | 
	405 | 
	
		
 
	 | 
	 | 
	406 | 
	
		    check(nrmap.inverse()[0] == n0, "Wrong RangeIdMap::InverseMap");
 
	 | 
	 | 
	407 | 
	
		    check(armap.inverse()[0] == a0, "Wrong RangeIdMap::InverseMap");
 
	 | 
	 | 
	408 | 
	
		    
 
	 | 
	 | 
	409 | 
	
		    gr.erase(n1);
 
	 | 
	 | 
	410 | 
	
		    
 
	 | 
	 | 
	411 | 
	
		    if (nrmap[n0] == 1) nrmap.swap(n0, n2);
 
	 | 
	 | 
	412 | 
	
		    nrmap.swap(n2, n0);
 
	 | 
	 | 
	413 | 
	
		    if (armap[a1] == 1) armap.swap(a1, a3);
 
	 | 
	 | 
	414 | 
	
		    armap.swap(a3, a1);
 
	 | 
	 | 
	415 | 
	
		    
 
	 | 
	 | 
	416 | 
	
		    check(nrmap.size() == 2 && armap.size() == 2,
 
	 | 
	 | 
	417 | 
	
		          "Wrong RangeIdMap::size()");
 
	 | 
	 | 
	418 | 
	
		
 
	 | 
	 | 
	419 | 
	
		    check(nrmap[n0] == 1 && nrmap(1) == n0, "Wrong RangeIdMap");
 
	 | 
	 | 
	420 | 
	
		    check(nrmap[n2] == 0 && nrmap(0) == n2, "Wrong RangeIdMap");
 
	 | 
	 | 
	421 | 
	
		    
 
	 | 
	 | 
	422 | 
	
		    check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap");
 
	 | 
	 | 
	423 | 
	
		    check(armap[a3] == 0 && armap(0) == a3, "Wrong RangeIdMap");
 
	 | 
	 | 
	424 | 
	
		
 
	 | 
	 | 
	425 | 
	
		    check(nrmap.inverse()[0] == n2, "Wrong RangeIdMap::InverseMap");
 
	 | 
	 | 
	426 | 
	
		    check(armap.inverse()[0] == a3, "Wrong RangeIdMap::InverseMap");
 
	 | 
	 | 
	427 | 
	
		  }
 
	 | 
	 | 
	428 | 
	
		  
 
	 | 
	| 353 | 
	429 | 
	
		  // CrossRefMap
 
	 | 
	| 354 | 
	430 | 
	
		  {
	 | 
	| 355 | 
	431 | 
	
		    typedef ListDigraph Graph;
 
	 | 
	| 356 | 
	432 | 
	
		    DIGRAPH_TYPEDEFS(Graph);
 
	 | 
	| 357 | 
	433 | 
	
		
 
	 | 
	| 358 | 
	434 | 
	
		    checkConcept<ReadWriteMap<Node, int>,
 
	 | 
	| 359 | 
	435 | 
	
		                 CrossRefMap<Graph, Node, int> >();
 
	 | 
	 | 
	436 | 
	
		    checkConcept<ReadWriteMap<Node, bool>,
 
	 | 
	 | 
	437 | 
	
		                 CrossRefMap<Graph, Node, bool> >();
 
	 | 
	 | 
	438 | 
	
		    checkConcept<ReadWriteMap<Node, double>,
 
	 | 
	 | 
	439 | 
	
		                 CrossRefMap<Graph, Node, double> >();
 
	 | 
	| 360 | 
	440 | 
	
		    
 
	 | 
	| 361 | 
	441 | 
	
		    Graph gr;
 
	 | 
	| 362 | 
	442 | 
	
		    typedef CrossRefMap<Graph, Node, char> CRMap;
 
	 | 
	| 363 | 
	443 | 
	
		    typedef CRMap::ValueIterator ValueIt;
 
	 | 
	| 364 | 
	444 | 
	
		    CRMap map(gr);
 
	 | 
	| 365 | 
	445 | 
	
		    
 
	 | 
	| 366 | 
	446 | 
	
		    Node n0 = gr.addNode();
 
	 | 
	| 367 | 
	447 | 
	
		    Node n1 = gr.addNode();
 
	 | 
	| 368 | 
	448 | 
	
		    Node n2 = gr.addNode();
 
	 | 
	| 369 | 
	449 | 
	
		    
 
	 | 
	| 370 | 
	450 | 
	
		    map.set(n0, 'A');
 
	 | 
	| 371 | 
	451 | 
	
		    map.set(n1, 'B');
 
	 | 
	| 372 | 
	452 | 
	
		    map.set(n2, 'C');
 
	 | 
	 | 
	453 | 
	
		    
 
	 | 
	 | 
	454 | 
	
		    check(map[n0] == 'A' && map('A') == n0 && map.inverse()['A'] == n0,
	 | 
	 | 
	455 | 
	
		          "Wrong CrossRefMap");
 
	 | 
	 | 
	456 | 
	
		    check(map[n1] == 'B' && map('B') == n1 && map.inverse()['B'] == n1,
	 | 
	 | 
	457 | 
	
		          "Wrong CrossRefMap");
 
	 | 
	 | 
	458 | 
	
		    check(map[n2] == 'C' && map('C') == n2 && map.inverse()['C'] == n2,
	 | 
	 | 
	459 | 
	
		          "Wrong CrossRefMap");
 
	 | 
	 | 
	460 | 
	
		    check(map.count('A') == 1 && map.count('B') == 1 && map.count('C') == 1,
	 | 
	 | 
	461 | 
	
		          "Wrong CrossRefMap::count()");
 
	 | 
	 | 
	462 | 
	
		    
 
	 | 
	 | 
	463 | 
	
		    ValueIt it = map.beginValue();
 
	 | 
	 | 
	464 | 
	
		    check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' &&
 
	 | 
	 | 
	465 | 
	
		          it == map.endValue(), "Wrong value iterator");
 
	 | 
	 | 
	466 | 
	
		    
 
	 | 
	| 373 | 
	467 | 
	
		    map.set(n2, 'A');
 
	 | 
	 | 
	468 | 
	
		
 
	 | 
	 | 
	469 | 
	
		    check(map[n0] == 'A' && map[n1] == 'B' && map[n2] == 'A',
 
	 | 
	 | 
	470 | 
	
		          "Wrong CrossRefMap");
 
	 | 
	 | 
	471 | 
	
		    check(map('A') == n0 && map.inverse()['A'] == n0, "Wrong CrossRefMap");
	 | 
	 | 
	472 | 
	
		    check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap");
	 | 
	 | 
	473 | 
	
		    check(map('C') == INVALID && map.inverse()['C'] == INVALID,
	 | 
	 | 
	474 | 
	
		          "Wrong CrossRefMap");
 
	 | 
	 | 
	475 | 
	
		    check(map.count('A') == 2 && map.count('B') == 1 && map.count('C') == 0,
	 | 
	 | 
	476 | 
	
		          "Wrong CrossRefMap::count()");
 
	 | 
	 | 
	477 | 
	
		
 
	 | 
	 | 
	478 | 
	
		    it = map.beginValue();
 
	 | 
	 | 
	479 | 
	
		    check(*it++ == 'A' && *it++ == 'A' && *it++ == 'B' &&
 
	 | 
	 | 
	480 | 
	
		          it == map.endValue(), "Wrong value iterator");
 
	 | 
	 | 
	481 | 
	
		
 
	 | 
	| 374 | 
	482 | 
	
		    map.set(n0, 'C');
 
	 | 
	| 375 | 
	483 | 
	
		
 
	 | 
	| 376 | 
	484 | 
	
		    check(map[n0] == 'C' && map[n1] == 'B' && map[n2] == 'A',
 
	 | 
	| 377 | 
	485 | 
	
		          "Wrong CrossRefMap");
 
	 | 
	| 378 | 
	486 | 
	
		    check(map('A') == n2 && map.inverse()['A'] == n2, "Wrong CrossRefMap");
	 | 
	| 379 | 
	487 | 
	
		    check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap");
	 | 
	| 380 | 
	488 | 
	
		    check(map('C') == n0 && map.inverse()['C'] == n0, "Wrong CrossRefMap");
	 | 
	 | 
	489 | 
	
		    check(map.count('A') == 1 && map.count('B') == 1 && map.count('C') == 1,
	 | 
	 | 
	490 | 
	
		          "Wrong CrossRefMap::count()");
 
	 | 
	| 381 | 
	491 | 
	
		
 
	 | 
	| 382 | 
	 | 
	
		    ValueIt it = map.beginValue();
 
	 | 
	 | 
	492 | 
	
		    it = map.beginValue();
 
	 | 
	| 383 | 
	493 | 
	
		    check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' &&
 
	 | 
	| 384 | 
	494 | 
	
		          it == map.endValue(), "Wrong value iterator");
 
	 | 
	| 385 | 
	495 | 
	
		  }
 
	 | 
	| 386 | 
	496 | 
	
		
 
	 | 
	| 387 | 
	497 | 
	
		  return 0;
 
	 | 
	| 388 | 
	498 | 
	
		}
 
	 |