WvStreams
unifiltergen.cc
00001 /*
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 2002 Net Integration Technologies, Inc.
00004  * 
00005  * A UniConfGen framework to simplify writing filtering generators.
00006  */
00007 #include "unifiltergen.h"
00008 
00009 /***** UniFilterGen *****/
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     // by default, don't rename the key
00040     mapped_key = unmapped_key;
00041     return true;
00042 }
00043 
00044 bool UniFilterGen::reversekeymap(const UniConfKey &mapped_key, UniConfKey &unmapped_key)
00045 {
00046     // by default, don't rename the key
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 }