00001
00002
00003
00004
00005
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
00047
00049 virtual void setcallback(const UniConfGenCallback &callback,
00050 void *userdata) = 0;
00051
00052
00053
00054
00059 virtual bool isok() = 0;
00060
00061
00062
00063
00065 virtual void commit() = 0;
00066
00073 virtual bool refresh() = 0;
00074
00081 virtual void flush_buffers() = 0;
00082
00083
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
00126
00133 virtual void set(const UniConfKey &key, WvStringParm value) = 0;
00134
00135
00136
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
00198
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
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
00270 virtual bool isok();
00271
00272
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
00281 virtual void set(const UniConfKey &key, WvStringParm value) = 0;
00282
00283 virtual void flush_buffers() = 0;
00284
00285
00286 virtual bool haschildren(const UniConfKey &key);
00287 virtual Iter *iterator(const UniConfKey &key) = 0;
00288
00289
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
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
00378 virtual void rewind();
00379 virtual bool next();
00380 virtual UniConfKey key() const;
00381 virtual WvString value() const;
00382 };
00383
00384 #endif // __UNICONFGEN_H