00001
00002
00003
00004
00005
00006
00007 #include "unifiltergen.h"
00008
00009
00010
00011 UniFilterGen::UniFilterGen(IUniConfGen *inner)
00012 : xinner(NULL)
00013 {
00014 setinner(inner);
00015 }
00016
00017
00018 UniFilterGen::~UniFilterGen()
00019 {
00020 IUniConfGen *gen = xinner;
00021 setinner(NULL);
00022 WVRELEASE(gen);
00023 }
00024
00025
00026 void UniFilterGen::setinner(IUniConfGen *inner)
00027 {
00028 if (xinner)
00029 xinner->del_callback(this);
00030 xinner = inner;
00031 if (xinner)
00032 xinner->add_callback(this, wv::bind(&UniFilterGen::gencallback, this,
00033 _1, _2));
00034 }
00035
00036
00037 bool UniFilterGen::keymap(const UniConfKey &unmapped_key, UniConfKey &mapped_key)
00038 {
00039
00040 mapped_key = unmapped_key;
00041 return true;
00042 }
00043
00044 bool UniFilterGen::reversekeymap(const UniConfKey &mapped_key, UniConfKey &unmapped_key)
00045 {
00046
00047 unmapped_key = mapped_key;
00048 return true;
00049 }
00050
00051
00052 void UniFilterGen::commit()
00053 {
00054 if (xinner)
00055 xinner->commit();
00056 }
00057
00058
00059 bool UniFilterGen::refresh()
00060 {
00061 if (xinner)
00062 return xinner->refresh();
00063 else
00064 return false;
00065 }
00066
00067
00068 void UniFilterGen::prefetch(const UniConfKey &key, bool recursive)
00069 {
00070 UniConfKey mapped_key;
00071 if (xinner && keymap(key, mapped_key))
00072 xinner->prefetch(mapped_key, recursive);
00073 }
00074
00075
00076 WvString UniFilterGen::get(const UniConfKey &key)
00077 {
00078 UniConfKey mapped_key;
00079 if (xinner && keymap(key, mapped_key))
00080 return xinner->get(mapped_key);
00081 else
00082 return WvString::null;
00083 }
00084
00085
00086 void UniFilterGen::flush_buffers()
00087 {
00088 if (xinner)
00089 xinner->flush_buffers();
00090 }
00091
00092
00093 void UniFilterGen::set(const UniConfKey &key, WvStringParm value)
00094 {
00095 UniConfKey mapped_key;
00096 if (xinner && keymap(key, mapped_key))
00097 xinner->set(mapped_key, value);
00098 }
00099
00100
00101 void UniFilterGen::setv(const UniConfPairList &pairs)
00102 {
00103 if (xinner)
00104 xinner->setv(pairs);
00105 }
00106
00107
00108 bool UniFilterGen::exists(const UniConfKey &key)
00109 {
00110 UniConfKey mapped_key;
00111 if (xinner && keymap(key, mapped_key))
00112 return xinner->exists(mapped_key);
00113 else
00114 return false;
00115 }
00116
00117
00118 bool UniFilterGen::haschildren(const UniConfKey &key)
00119 {
00120 UniConfKey mapped_key;
00121 if (xinner && keymap(key, mapped_key))
00122 return xinner->haschildren(mapped_key);
00123 else
00124 return false;
00125 }
00126
00127
00128 bool UniFilterGen::isok()
00129 {
00130 if (xinner)
00131 return xinner->isok();
00132 else
00133 return false;
00134 }
00135
00136
00137 UniConfGen::Iter *UniFilterGen::iterator(const UniConfKey &key)
00138 {
00139 UniConfKey mapped_key;
00140 if (xinner && keymap(key, mapped_key))
00141 return xinner->iterator(mapped_key);
00142 else
00143 return NULL;
00144 }
00145
00146
00147 UniConfGen::Iter *UniFilterGen::recursiveiterator(const UniConfKey &key)
00148 {
00149 UniConfKey mapped_key;
00150 if (xinner && keymap(key, mapped_key))
00151 return xinner->recursiveiterator(mapped_key);
00152 else
00153 return NULL;
00154 }
00155
00156
00157 void UniFilterGen::gencallback(const UniConfKey &key, WvStringParm value)
00158 {
00159 UniConfKey unmapped_key;
00160 if (xinner && reversekeymap(key, unmapped_key))
00161 delta(unmapped_key, value);
00162 }