Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

uniconfgen.h

00001 /* -*- Mode: C++ -*-
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 2002 Net Integration Technologies, Inc.
00004  * 
00005  * An abstract data container that backs a UniConf tree.
00006  */
00007 #ifndef __UNICONFGEN_H
00008 #define __UNICONFGEN_H
00009  
00010 #include "wvxplc.h"
00011 #include "uniconfkey.h"
00012 #include "wvcallback.h"
00013 #include "wvlinklist.h"
00014 #include "uniconfpair.h"
00015 
00016 class UniConfGen;
00017 
00032 typedef WvCallback<void, const UniConfKey &, WvStringParm, void *> 
00033     UniConfGenCallback;
00034 
00041 class IUniConfGen : public IObject
00042 {
00043 public:
00044     virtual ~IUniConfGen();
00045     
00046     /***** Notification API *****/
00047     
00049     virtual void setcallback(const UniConfGenCallback &callback,
00050                              void *userdata) = 0;
00051     
00052 
00053     /***** Status API *****/
00054     
00059     virtual bool isok() = 0;
00060 
00061     
00062     /***** Key Persistence API *****/
00063     
00065     virtual void commit() = 0;
00066     
00073     virtual bool refresh() = 0;
00074 
00081     virtual void flush_buffers() = 0;
00082 
00083     /***** Key Retrieval API *****/
00084     
00094     virtual void prefetch(const UniConfKey &key, bool recursive) = 0;
00095     
00100     virtual WvString get(const UniConfKey &key) = 0;
00101     
00110     virtual bool exists(const UniConfKey &key) = 0;
00111 
00112 
00122     virtual int str2int(WvStringParm s, int defvalue) const = 0;
00123 
00124     
00125     /***** Key Storage API *****/
00126     
00133     virtual void set(const UniConfKey &key, WvStringParm value) = 0;
00134 
00135 
00136     /***** Key Enumeration API *****/
00137     
00148     virtual bool haschildren(const UniConfKey &key) = 0;
00149 
00151     class Iter;
00152 
00154     class NullIter;
00155     
00157     class ListIter;
00158 
00166     virtual Iter *iterator(const UniConfKey &key) = 0;
00167     
00182     virtual Iter *recursiveiterator(const UniConfKey &key) = 0;
00183 };
00184 
00185 DEFINE_IID(IUniConfGen, {0x7ca76e98, 0xb694, 0x43ca,
00186     {0xb0, 0x56, 0x8b, 0x9d, 0xde, 0x9a, 0xbe, 0x9f}});
00187 
00188 
00193 class UniConfGen : public IUniConfGen
00194 {
00195     IMPLEMENT_IOBJECT(UniConfGen);
00196 
00197     // These fields are deliberately hidden to encourage use of the
00198     // special notification members
00199 
00200     UniConfGenCallback cb; 
00201     void *cbdata;
00202     int hold_nesting;
00203     UniConfPairList deltas;
00204     
00205 protected:
00207     UniConfGen();
00208 
00209 public:
00211     virtual ~UniConfGen();
00212 
00213     /***** Notification API *****/
00214     
00219     void setcallback(const UniConfGenCallback &callback, void *userdata);
00220     
00227     void dispatch_delta(const UniConfKey &key, WvStringParm value);
00228 
00237     void hold_delta();
00238 
00247     void unhold_delta();
00248 
00253     void clear_delta();
00254 
00259     void flush_delta();
00260 
00267     void delta(const UniConfKey &key, WvStringParm value);   
00268     
00269     /***** Status API *****/
00270     virtual bool isok();
00271     
00272     /***** Key Persistence API *****/
00273     virtual void commit() { }
00274     virtual bool refresh() { return true; }
00275     virtual void prefetch(const UniConfKey &key, bool recursive) { }
00276     virtual WvString get(const UniConfKey &key) = 0;
00277     virtual bool exists(const UniConfKey &key);
00278     virtual int str2int(WvStringParm s, int defvalue) const;
00279 
00280     /***** Key Storage API *****/
00281     virtual void set(const UniConfKey &key, WvStringParm value) = 0;
00282 
00283     virtual void flush_buffers() = 0;
00284 
00285     /***** Key Enumeration API *****/
00286     virtual bool haschildren(const UniConfKey &key);
00287     virtual Iter *iterator(const UniConfKey &key) = 0;
00288     
00289     // a helpful default that just calls iterator() recursively
00290     virtual Iter *recursiveiterator(const UniConfKey &key);
00291 };
00292 
00293 DeclareWvList(IUniConfGen);
00294 DeclareWvList2(UniConfGenList, IUniConfGen);
00295 
00296 
00311 class UniConfGen::Iter
00312 {
00313 public:
00315     virtual ~Iter() { }
00316 
00321     virtual void rewind() = 0;
00322 
00328     virtual bool next() = 0;
00329 
00331     virtual UniConfKey key() const = 0;
00332     
00337     virtual WvString value() const = 0;
00338 };
00339 
00340 
00345 class UniConfGen::NullIter : public UniConfGen::Iter
00346 {
00347 public:
00348     /***** Overridden members *****/
00349     
00350     virtual void rewind() { }
00351     virtual bool next() { return false; }
00352     virtual UniConfKey key() const { return UniConfKey::EMPTY; }
00353     virtual WvString value() const { return WvString(); }
00354 };
00355 
00356 
00368 class UniConfGen::ListIter : public UniConfGen::Iter
00369 {
00370 public:
00371     IUniConfGen *gen;
00372     WvList<WvString> keys, values;
00373     WvList<WvString>::Iter ki, vi;
00374     
00375     ListIter(IUniConfGen *_gen);
00376 
00377     /***** Overridden members *****/
00378     virtual void rewind();
00379     virtual bool next();
00380     virtual UniConfKey key() const;
00381     virtual WvString value() const;
00382 };
00383 
00384 #endif // __UNICONFGEN_H

Generated on Sun Jul 10 15:30:21 2005 for WvStreams by  doxygen 1.4.0