| VRS - The Virtual Rendering System |
| version 3.3 |
00001 /********************************************************************** 00002 VRS - The Virtual Rendering System 00003 Copyright (C) 2001 Computer Graphics Systems Group at the 00004 Hasso-Plattner-Institute, Potsdam, Germany. 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Lesser General Public 00007 License as published by the Free Software Foundation; either 00008 version 2.1 of the License, or (at your option) any later version. 00009 This library is distributed in the hope that it will be useful, but 00010 WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 See the GNU Lesser General Public License for more details. 00013 You should have received a copy of the GNU Lesser+ General Public 00014 License along with this library; if not, write to the FreeSoftware 00015 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA, 02111-1307, USA. 00016 **********************************************************************/ 00017 // $Id: dictionary.h 4455 2004-11-03 10:58:29Z saar $ 00018 // $Date: 2004-11-03 11:58:29 +0100 (Wed, 03 Nov 2004) $ 00019 // $Revision: 4455 $ 00020 // $State$ 00021 // $Author: saar $ 00022 // 00023 // $Log$ 00024 // Revision 1.13 2004/11/03 10:58:28 saar 00025 // Class comment changed (Doxygen style) 00026 // 00027 // Revision 1.12 2004/03/12 16:28:39 baumann 00028 // macros VRS_NAMESPACE_BEGIN/_END expanded and removed 00029 // 00030 // Revision 1.11 2004/01/19 11:43:57 baumann 00031 // serialization mechanism improved 00032 // 00033 // Revision 1.10 2003/11/07 14:19:24 kirsch 00034 // removed leading underscore from include guards 00035 // 00036 // Revision 1.9 2003/07/10 11:07:56 baumann 00037 // code cleanup 00038 // 00039 // Revision 1.8 2002/11/25 10:00:03 baumann 00040 // changed return type of HashValue() to UINT 00041 // 00042 // Revision 1.7 2002/11/06 07:53:50 baumann 00043 // cleanup of class registration for serialization 00044 // 00045 // Revision 1.6 2002/11/04 16:39:55 baumann 00046 // macro VRS_SERIALIZATION_REGISTRATION added 00047 // 00048 // Revision 1.5 2002/08/06 16:24:01 baumann 00049 // VRS_API removed for template classes 00050 // 00051 // Revision 1.4 2002/07/02 15:23:48 baumann 00052 // non-persistent containers now have the prefix NonPersistent, e.g. NonPersistentArray<T> 00053 // persistent containers now have no prefix, e.g. Array<T> 00054 // 00055 // Revision 1.3 2002/07/02 06:12:34 baumann 00056 // VRS::Iterator<T> completely rewritten 00057 // 00058 // Revision 1.2 2002/06/28 07:08:14 baumann 00059 // new method isEmpty() added 00060 // 00061 // Revision 1.1 2002/03/04 12:03:54 kersting 00062 // directory structure changes 00063 // 00064 // Revision 1.11 2002/03/03 21:44:24 kosta 00065 // VRS_TYPEINFO-macro rewritten 00066 // 00067 // Revision 1.10 2002/02/19 10:34:07 kosta 00068 // undone all changes since 2002-02-15 00069 // 00070 // Revision 1.7 2002/02/14 09:37:20 kosta 00071 // automatic serialization registration for template classes implemented 00072 // 00073 // Revision 1.6 2002/02/11 14:36:10 kosta 00074 // VRS_NoImpl added for non persistent class Dictionary<K, V>::serialize() 00075 // 00076 // Revision 1.5 2002/02/05 15:46:35 kosta 00077 // Dictionary<K, V> split into 2 classes: 00078 // Dictionary<K, V> (which cannot be serialized) 00079 // PersistentDictionary<K, V> (which can be serialized) 00080 // 00081 // Revision 1.4 2002/02/04 11:54:37 kosta 00082 // persistency rewritten (for better namespace support) 00083 // 00084 // Revision 1.3 2002/01/15 16:25:53 kosta 00085 // macros rewritten for a better namespace support 00086 // 00087 // Revision 1.2 2001/11/13 16:36:30 kirsch 00088 // changed line feed to unix style (removed control-M) 00089 // 00090 // Revision 1.1.1.1 2001/06/08 08:09:20 kirsch 00091 // imported alpha-version by olli 00092 // 00093 00094 00095 #ifndef VRS_DICTIONARY_H 00096 #define VRS_DICTIONARY_H 00097 00098 #include <vrs/container/hashtable.h> 00099 00100 namespace VRS { 00101 00102 template<typename K, typename V> class DictionaryItem; 00103 00105 template<typename K, typename V> 00106 class NonPersistentDictionary : public SharedObj { 00107 public: 00108 NonPersistentDictionary(unsigned int estimatedElements = 0); 00114 //: K::K(const K&) 00115 //: K::operator=(const K&) 00116 //: K::operator== 00117 //: unsigned int HashValue(const K&) 00118 //: V::V() 00119 //: V::V(const V&) 00120 //: V::operator=(const V&) 00121 00122 void setValue(const K& key, const V& value); 00123 const V& getValue(const K& key) const; 00124 00125 const V& operator[](const K& key) const; 00126 V& operator[](const K& key); 00130 bool find(const K& key, V& result) const; 00136 bool contains(const K& key) const; 00140 int size() const; 00142 00143 bool isEmpty() const; 00145 00146 bool insert(const K& key, const V& v); 00147 bool erase(const K& key); 00148 void clear(); 00157 Iterator<K>* newKeyIterator() const; 00159 00160 Iterator<V>* newValueIterator() const; 00162 00163 VRS_TYPEINFO(NonPersistentDictionary, SharedObj); 00164 VRS_SERIALIZABLE_ABSTRACT_CLASS(NonPersistentDictionary); // not supported (throws exception); use Dictionary<K, V> instead 00165 00166 private: 00167 SO<NonPersistentHashTable<DictionaryItem<K,V> > > ht_; 00168 }; 00169 00170 00171 template<typename K, typename V> 00172 class Dictionary : public NonPersistentDictionary<K, V> { 00174 public: 00175 Dictionary(unsigned int estimatedElements = 0) : NonPersistentDictionary<K, V>(estimatedElements) { } 00177 00178 VRS_TYPEINFO(Dictionary, VRS_TEMPLATE_ARGS_2(K, V, NonPersistentDictionary)); 00179 VRS_SERIALIZABLE(Dictionary); 00180 }; 00181 00182 VRS_SERIALIZATION_REGISTRATION_TEMPLATE_2(Dictionary); 00183 00184 } // namespace VRS 00185 00186 #include <vrs/container/dictionary.tli> 00187 00188 #endif // VRS_DICTIONARY_H