src/work/deba/pac_map_factory.h
author alpar
Wed, 21 Jul 2004 17:38:02 +0000
changeset 720 193d881b23ad
child 921 818510fa3d99
permissions -rw-r--r--
MapBase added
     1 #ifndef PAC_MAP_FACTORY_H
     2 #define PAC_MAP_FACTORY_H
     3 
     4 #include "map_base.h"
     5 
     6 /**
     7 	Converter class to use the standard template
     8 	libary's pair associative containers as a graph map.
     9 */
    10 
    11 namespace hugo {
    12 	
    13 	template <typename G, typename K, typename KIt, template <typename, typename> class PAC>
    14 	class PacMapFactory {
    15 	
    16 	
    17 	public:
    18 		
    19 		typedef G Graph;
    20 		typedef K Key;
    21 		typedef KIt KeyIt;
    22 		
    23 		template <typename V> 
    24 		class Map : public MapBase<G, K, KIt> {
    25 		public:
    26 			typedef V Value;
    27 	
    28 			Map() {}
    29 			
    30 			Map(Graph& g, MapRegistry<G, K, KIt>& r) 
    31 				: MapBase<G, K, KIt>(g, r) {
    32 				init();
    33 			}
    34 				
    35 			virtual ~Map() {
    36 				destroy();
    37 			}
    38 	
    39 	
    40 			V& operator[](const K& key) {
    41 				return container.find(key)->second;
    42 			} 
    43 		
    44 			const V& operator[](const K& key) const {
    45 				return container.find(key)->second;
    46 			}
    47 	
    48 			const V& get(const K& key) const {
    49 				return container.find(key)->second;
    50 			} 
    51 		
    52 			void set(const K& key, const V& value) {
    53 				container.find(key)->second = value;
    54 			}
    55 		
    56 			void add(const K& key) {
    57 				container.insert(key);
    58 			}
    59 		
    60 			void erase(const K& key) {
    61 				container.erase(key);
    62 			}
    63 	
    64 		private:
    65 			typedef PAC<K, V> Container;
    66 		
    67 			Container container;
    68 		};
    69 		
    70 	};
    71 }
    72 
    73 #endif