00001
00002
00003
00004
00005
00006
00007 #ifndef __UNICONFGEN_H
00008 #define __UNICONFGEN_H
00009
00010 #include "wvcallback.h"
00011 #include "wvcallbacklist.h"
00012 #include "uniconfpair.h"
00013
00014 class UniConfGen;
00015 class UniListIter;
00016
00030 typedef WvCallback<void, const UniConfKey &, WvStringParm>
00031 UniConfGenCallback;
00032
00039 class IUniConfGen : public IObject
00040 {
00041 public:
00042 virtual ~IUniConfGen();
00043
00044
00045
00047 virtual void add_callback(void *cookie,
00048 const UniConfGenCallback &callback) = 0;
00049
00051 virtual void del_callback(void *cookie) = 0;
00052
00053
00054
00055
00060 virtual bool isok() = 0;
00061
00062
00063
00064
00066 virtual void commit() = 0;
00067
00074 virtual bool refresh() = 0;
00075
00082 virtual void flush_buffers() = 0;
00083
00084
00085
00095 virtual void prefetch(const UniConfKey &key, bool recursive) = 0;
00096
00101 virtual WvString get(const UniConfKey &key) = 0;
00102
00111 virtual bool exists(const UniConfKey &key) = 0;
00112
00113
00123 virtual int str2int(WvStringParm s, int defvalue) const = 0;
00124
00125
00126
00127
00132 virtual void set(const UniConfKey &key, WvStringParm value) = 0;
00133
00134
00139 virtual void setv(const UniConfPairList &pairs) = 0;
00140
00141
00142
00143
00154 virtual bool haschildren(const UniConfKey &key) = 0;
00155
00157 class Iter;
00158
00160 class NullIter;
00161
00163 typedef ::UniListIter ListIter;
00164
00172 virtual Iter *iterator(const UniConfKey &key) = 0;
00173
00188 virtual Iter *recursiveiterator(const UniConfKey &key) = 0;
00189 };
00190
00191 DEFINE_IID(IUniConfGen, {0x7ca76e98, 0xb694, 0x43ca,
00192 {0xb0, 0x56, 0x8b, 0x9d, 0xde, 0x9a, 0xbe, 0x9f}});
00193
00194
00199 class UniConfGen : public IUniConfGen
00200 {
00201 IMPLEMENT_IOBJECT(UniConfGen);
00202
00203
00204
00205
00206 WvCallbackList<UniConfGenCallback> cblist;
00207 int hold_nesting;
00208 UniConfPairList deltas;
00209
00210 protected:
00212 UniConfGen();
00213
00214 public:
00216 virtual ~UniConfGen();
00217
00218
00219
00224 virtual void add_callback(void *cookie,
00225 const UniConfGenCallback &callback);
00226 virtual void del_callback(void *cookie);
00227
00234 void dispatch_delta(const UniConfKey &key, WvStringParm value);
00235
00244 void hold_delta();
00245
00254 void unhold_delta();
00255
00260 void clear_delta();
00261
00266 void flush_delta();
00267
00274 void delta(const UniConfKey &key, WvStringParm value);
00275
00276
00277 virtual bool isok();
00278
00279
00280 virtual void commit() { }
00281 virtual bool refresh() { return true; }
00282 virtual void prefetch(const UniConfKey &key, bool recursive) { }
00283 virtual WvString get(const UniConfKey &key) = 0;
00284 virtual bool exists(const UniConfKey &key);
00285 virtual int str2int(WvStringParm s, int defvalue) const;
00286
00287
00288 virtual void set(const UniConfKey &key, WvStringParm value) = 0;
00289 virtual void setv(const UniConfPairList &pairs) = 0;
00290
00291 virtual void flush_buffers() = 0;
00292
00293
00294 virtual bool haschildren(const UniConfKey &key);
00295 virtual Iter *iterator(const UniConfKey &key) = 0;
00296
00297
00298 virtual Iter *recursiveiterator(const UniConfKey &key);
00299
00300 protected:
00301
00302 void setv_naive(const UniConfPairList &pairs);
00303 };
00304
00305 DeclareWvList(IUniConfGen);
00306 DeclareWvList2(UniConfGenList, IUniConfGen);
00307
00308
00323 class UniConfGen::Iter
00324 {
00325 public:
00327 virtual ~Iter() { }
00328
00333 virtual void rewind() = 0;
00334
00340 virtual bool next() = 0;
00341
00343 virtual UniConfKey key() const = 0;
00344
00349 virtual WvString value() const = 0;
00350 };
00351
00352
00357 class UniConfGen::NullIter : public UniConfGen::Iter
00358 {
00359 public:
00360
00361
00362 virtual void rewind() { }
00363 virtual bool next() { return false; }
00364 virtual UniConfKey key() const { return UniConfKey::EMPTY; }
00365 virtual WvString value() const { return WvString(); }
00366 };
00367
00368
00369 #endif // __UNICONFGEN_H