KDevelop API Documentation

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.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Mar 23 00:03:52 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003