00001
00002
00003
00004
00005
00006
00007
#include "uniconf.h"
00008
#include "unicachegen.h"
00009
#include "wvmoniker.h"
00010
00011
00012
00013 static UniConfGen *
creator(
WvStringParm s,
IObject *obj,
void *)
00014 {
00015
UniConfGen *gen = NULL;
00016
00017
if (obj)
00018 gen = mutate<UniConfGen>(obj);
00019
if (!gen)
00020 gen = wvcreate<UniConfGen>(s);
00021
00022
return new UniCacheGen(gen);
00023 }
00024
00025
static WvMoniker<UniConfGen> reg(
"cache", creator);
00026
00027
00028
00029
00030 UniCacheGen::UniCacheGen(
UniConfGen *_inner)
00031 :
log("UniCache",
WvLog::Debug1), inner(_inner)
00032 {
00033
loadtree();
00034
00035
if (
inner)
00036
inner->
setcallback(
UniConfGenCallback(
this,
00037 &
UniCacheGen::deltacallback), NULL);
00038 }
00039
00040
00041 UniCacheGen::~UniCacheGen()
00042 {
00043
delete inner;
00044 }
00045
00046
00047 void UniCacheGen::loadtree(
const UniConfKey &key)
00048 {
00049
UniConfGen::Iter *i =
inner->
iterator(key);
00050
00051
if (!i)
00052
return;
00053
00054
for (i->
rewind(); i->
next(); )
00055 {
00056
WvString newkey(
"%s/%s", key, (*i).key());
00057
WvString value(
inner->
get(newkey));
00058
00059
if (!!value)
00060 UniTempGen::set(newkey, value);
00061
00062
if (
inner->
haschildren(newkey))
00063
loadtree(newkey);
00064 }
00065
00066
delete i;
00067 }
00068
00069
00070 void UniCacheGen::deltacallback(
const UniConfKey &key,
WvStringParm value,
00071
void *userdata)
00072 {
00073 UniTempGen::set(key, value);
00074 }
00075
00076
00077 void UniCacheGen::set(
const UniConfKey &key,
WvStringParm value)
00078 {
00079
inner->
set(key, value);
00080 }