source: XMLIO_V2/dev/dev_rv/xmlio_container.hpp @ 91

Last change on this file since 91 was 91, checked in by hozdoba, 14 years ago

Corrections de plusieurs problÚmes.

File size: 3.3 KB
Line 
1#ifndef __XMLIO_CONTAINER__
2#define __XMLIO_CONTAINER__
3
4// Classes utilisées issues de Poco
5using Poco::HashMap;
6using Poco::Hash;
7
8// Classes utilisées issues de la STL
9using std::vector;
10using std::string;
11using std::pair;
12using std::ostream;
13
14// Classes XMLIOSERVER
15using XMLIOSERVER::XMLIOUndefinedValueException;
16
17namespace XMLIOSERVER
18{
19   template<class Key, class Mapped, class HashFunc = Hash<Key> >
20      class ExHashMap
21         : private HashMap<Key, Mapped, Hash<Key> >
22   {
23      public :
24         ExHashMap() :  HashMap<Key, Mapped, Hash<Key> >(), _elemList()
25         {/* Ne rien faire de plus */}
26               
27         Mapped& operator[] (const Key& kval) throw (XMLIOUndefinedValueException)
28         { 
29            if(!hasMappedValue(kval))
30               throw XMLIOUndefinedValueException("Appel de la méthode ExHashMap::operator[] invalide.");
31            return (find(kval)->second); 
32         }
33         
34         bool hasMappedValue(const Key& kval) {return (find(kval) != this->end());}
35         
36         const vector<Mapped*> getVector(void) { return (this->_elemList); }         
37
38         size_t getVectorSize(void) const {return (this->_elemList.size());}
39         size_t getSize(void) const {return (this->size());}
40         
41         virtual ~ExHashMap()
42         {/* Ne rien faire de plus */}
43         
44      protected :
45     
46         bool addValue(const Key& kval, Mapped& element)
47         {
48            pair<typename ExHashMap::Iterator,bool> p = this->insert(make_pair (kval,element));
49            if(!p.second) return (false);
50            return (this->addValue(element));
51         }
52         
53         bool addValue(Mapped& element)
54         {   this->_elemList.insert(this->_elemList.end(), &element);   return (true);   }   
55         
56         
57         void removeValue(const Key& kval)
58         { Mapped& element = find(kval)->second; removeValue(element); this->erase(kval);   }
59         
60         void removeValue(const Mapped& element)
61         {
62            for (int i = 0; i < this->_elemList.size(); i++)             
63               if (*this->_elemList[i] == element ) this->_elemList.erase(this->_elemList.begin()+i);
64         }
65         
66      private :   
67         vector<Mapped*> _elemList;
68         
69   }; // class ExHashMap
70   
71   /////////////////////////////////////////////////////////////
72   
73   template<class Mapped>
74      class StrHashMap
75         : public ExHashMap<string, Mapped, Hash<string> >
76   {
77      public :
78     
79         StrHashMap() :  ExHashMap<string, Mapped, Hash<string> >()   
80         {/* Ne rien faire de plus */}   
81         
82         bool addObject(Mapped& element)
83         { if(element.hasId()) return(addValue(element.getId(), element));   return(addValue(element)); }
84         
85         bool addPtrObject(Mapped element)
86         { if(element->hasId()) return(addValue(element->getId(), element));   return(addValue(element)); }
87         
88         bool removeObject(const string& kval)
89         { 
90            if(!ExHashMap<string, Mapped, Hash<string> >::hasMappedValue(kval)) return (false);
91            ExHashMap<string, Mapped, Hash<string> >::removeValue(kval); return (true); 
92         }
93         
94         virtual ~StrHashMap()   
95         {/* Ne rien faire de plus */}
96         
97   }; // class StrHashMap
98           
99}; // namespace XMLIOSERVER
100
101#endif // __XMLIO_CONTAINER__
Note: See TracBrowser for help on using the repository browser.