KDevelop API Documentation

lib/structure/kdict.h

Go to the documentation of this file.
00001 // 00002 // 00003 // C++ Interface for module: KDict 00004 // 00005 // Description: An adaptor for QDict compatibility 00006 // 00007 // 00008 // Author: Eray Ozkural (exa) <erayo@cs.bilkent.edu.tr> 00009 // 00010 // Copyright: See COPYING file that comes with this distribution 00011 // 00012 // 00013 00014 #ifndef KDICT_H 00015 #define KDICT_H 00016 00017 #include <iostream> 00018 #include <kdebug.h> 00019 00020 #include "Trie.h" 00021 template <typename type> 00022 class KDict : private Structure::Trie_Impl<char, QString, type*> 00023 { 00024 public: 00025 typedef Structure::Trie_Impl<char, QString, type*> Impl; 00026 00027 KDict(bool cs = true) : Impl(' '), case_sensitive(cs), auto_delete(false) { 00029 component = 0; 00030 } 00031 KDict(int sz, bool cs = true) : Impl(' '), case_sensitive(cs), auto_delete(false) { 00032 // this is simply for compatibility, has no function 00033 depreceated("KDict(int sz,...)"); 00034 component = 0; 00035 } 00036 KDict ( const KDict<type> & dict ) { 00037 kDebug() << "KDict: COPY CONSTRUCTOR NOT IMPLEMENTED!" << endl; 00038 component = 0; 00039 } 00040 00041 struct Delete_Pointer { 00042 void operator() (Impl* node) { 00043 kdDebug() << "KDict: deleting pointer " << node->component; 00044 assert(node->component); 00045 delete node->component; 00046 } 00047 }; 00048 00049 ~KDict() { 00050 if (auto_delete) { 00051 Delete_Pointer fun; 00052 Impl::apply(fun); 00053 } 00054 } 00055 00056 //KDict<type> & operator= ( const KDict<type> & dict ); 00057 unsigned int count() const { 00058 return num_components(); 00059 } 00060 bool isEmpty () const { 00061 return size()==0; 00062 } 00063 00064 void insert ( const QString & key, const type * item ) { 00065 QString str = key; 00066 Structure::add_prefix(str, ' '); 00067 Impl::insert(const_cast<const QString &>(str), (type*) item); 00068 // discard return value 00069 } 00070 00071 void replace (const QString & key, const type * item ) { 00072 if (remove(key)) 00073 insert(const_cast<const QString &>(key), (type*)item); 00074 } 00075 00076 bool remove ( const QString & key ) { 00077 QString str = key; 00078 Structure::add_prefix(str, ' '); 00079 return Impl::remove(const_cast<const QString &>(str))!=0; 00080 } 00081 00082 type* find ( const QString & key ) { 00083 QString str = key; 00084 Structure::add_prefix(str, ' '); 00085 return Impl::query(const_cast<const QString &>(str))->component; 00086 } 00087 00088 type* operator[] ( const QString & key ) const { 00089 return Impl::query(key); 00090 } 00091 00092 //virtual void clear (); 00093 00094 type* take ( const QString & key ) { 00095 type* elt = find(key); 00096 remove(key); 00097 } 00098 void resize ( uint newsize ) { 00099 // Do nothing, this implementation has a dynamic size 00100 depreceated("resize"); 00101 } 00102 uint size () const { 00103 return num_components(); 00104 } 00105 std::ostream& print(std::ostream& out) const { return Impl::print(out); } 00106 00107 bool autoDelete () const { 00108 return auto_delete; 00109 } 00110 void setAutoDelete ( bool enable ) { 00111 auto_delete = enable; 00112 } 00113 00114 private: 00115 bool case_sensitive; 00116 bool auto_delete; 00117 void depreceated(const char* f) const { 00118 kdDebug() << "WARNING: KDict::" << f << " is depreceated!" << endl; 00119 } 00120 00121 }; // end kdict class 00122 00123 template <typename T> 00124 std::ostream& operator << (std::ostream& out, const KDict<T>& dict) 00125 { 00126 return dict.print(out); 00127 } 00128 00129 #endif
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Oct 6 17:39:08 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003