src/work/deba/pac_map_factory.h
author alpar
Fri, 23 Jul 2004 17:13:23 +0000
changeset 737 2d867176d10e
child 921 818510fa3d99
permissions -rw-r--r--
Several changes in Kruskal alg.
- Input object interface was changed to an STL compatible one.
- template parameters of class KruskalPairVec has been simplified.
- (the most of) the names meet the naming conventions.
- a lot of (but still not enough) documentation has been added.
- class KruskalMapVec has been commented out.
deba@595
     1
#ifndef PAC_MAP_FACTORY_H
deba@595
     2
#define PAC_MAP_FACTORY_H
deba@595
     3
deba@595
     4
#include "map_base.h"
deba@595
     5
deba@595
     6
/**
deba@595
     7
	Converter class to use the standard template
deba@595
     8
	libary's pair associative containers as a graph map.
deba@595
     9
*/
deba@595
    10
deba@595
    11
namespace hugo {
deba@595
    12
	
deba@595
    13
	template <typename G, typename K, typename KIt, template <typename, typename> class PAC>
deba@595
    14
	class PacMapFactory {
deba@595
    15
	
deba@595
    16
	
deba@595
    17
	public:
deba@595
    18
		
deba@595
    19
		typedef G Graph;
deba@595
    20
		typedef K Key;
deba@595
    21
		typedef KIt KeyIt;
deba@595
    22
		
deba@595
    23
		template <typename V> 
deba@595
    24
		class Map : public MapBase<G, K, KIt> {
deba@595
    25
		public:
deba@595
    26
			typedef V Value;
deba@595
    27
	
deba@595
    28
			Map() {}
deba@595
    29
			
deba@595
    30
			Map(Graph& g, MapRegistry<G, K, KIt>& r) 
deba@595
    31
				: MapBase<G, K, KIt>(g, r) {
deba@595
    32
				init();
deba@595
    33
			}
deba@595
    34
				
deba@595
    35
			virtual ~Map() {
deba@595
    36
				destroy();
deba@595
    37
			}
deba@595
    38
	
deba@595
    39
	
deba@595
    40
			V& operator[](const K& key) {
deba@595
    41
				return container.find(key)->second;
deba@595
    42
			} 
deba@595
    43
		
deba@595
    44
			const V& operator[](const K& key) const {
deba@595
    45
				return container.find(key)->second;
deba@595
    46
			}
deba@595
    47
	
deba@595
    48
			const V& get(const K& key) const {
deba@595
    49
				return container.find(key)->second;
deba@595
    50
			} 
deba@595
    51
		
deba@595
    52
			void set(const K& key, const V& value) {
deba@595
    53
				container.find(key)->second = value;
deba@595
    54
			}
deba@595
    55
		
deba@595
    56
			void add(const K& key) {
deba@595
    57
				container.insert(key);
deba@595
    58
			}
deba@595
    59
		
deba@595
    60
			void erase(const K& key) {
deba@595
    61
				container.erase(key);
deba@595
    62
			}
deba@595
    63
	
deba@595
    64
		private:
deba@595
    65
			typedef PAC<K, V> Container;
deba@595
    66
		
deba@595
    67
			Container container;
deba@595
    68
		};
deba@595
    69
		
deba@595
    70
	};
deba@595
    71
}
deba@595
    72
deba@595
    73
#endif