WvStreams
|
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 }