Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

uniwvconfgen.cc

Go to the documentation of this file.
00001 /*  
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 2002 Net Integration Technologies, Inc.
00004  * 
00005  * A generator to make a UniConf object out of a WvConf.
00006  */
00007 #include "wvconf.h"
00008 #include "uniwvconfgen.h"
00009 #include "wvmoniker.h"
00010 
00011 
00012 static UniConfGen *creator(WvStringParm s, IObject *, void *obj)
00013 {
00014     if (!obj)
00015         obj = new WvConf(s);
00016     
00017     // FIXME EEK!  This never deletes the WvConf object!
00018     return new UniWvConfGen(*(WvConf *)obj);
00019 }
00020 
00021 static WvMoniker<UniConfGen> reg("wvconf", creator);
00022 
00023 
00024 void UniWvConfGen::notify(void *userdata, WvStringParm section,
00025                           WvStringParm entry, WvStringParm oldval,
00026                           WvStringParm newval)
00027 {
00028     UniConfKey key(section, entry);
00029 
00030     tempvalue = newval;
00031     tempkey = &key;
00032     delta(key, newval);
00033     tempkey = NULL;
00034 }
00035 
00036 
00037 UniWvConfGen::UniWvConfGen(WvConf &_cfg):
00038     tempkey(NULL), tempvalue(), cfg(_cfg)
00039 {
00040     cfg.add_callback(WvConfCallback(this, &UniWvConfGen::notify), NULL,
00041                      "", "", this);
00042 }
00043 
00044 
00045 WvString UniWvConfGen::get(const UniConfKey &key)
00046 {
00047     if (tempkey && key == *tempkey)
00048         return tempvalue;
00049     else
00050         return cfg.get(key.first(), key.last(key.numsegments() - 1));
00051 }
00052 
00053 
00054 void UniWvConfGen::set(const UniConfKey &key, WvStringParm value)
00055 {
00056     WvString section = key.first();
00057     WvString keyname = key.last(key.numsegments() - 1);
00058 
00059     WvConfigSection *sect = cfg[section];
00060     if (value == WvString::null && sect)
00061         cfg.delete_section(key);
00062     else
00063         cfg.set(section, keyname, value);
00064 }
00065 
00066 
00067 bool UniWvConfGen::haschildren(const UniConfKey &key)
00068 {
00069     WvConfigSection *sect = cfg[key];
00070     if (sect)
00071         return true;
00072     return false;
00073 }
00074 
00075 
00076 UniWvConfGen::Iter *UniWvConfGen::iterator(const UniConfKey &key)
00077 {
00078     WvConfigSection *sect = cfg[key];
00079 
00080     if (sect)
00081         return new WvConfIter(sect);
00082     else
00083         return new UniConfGen::NullIter();
00084 }
00085 
00086 
00087 
00088 /***** UniWvConfGen::WvConfIter *****/
00089 
00090 UniWvConfGen::WvConfIter::WvConfIter(WvConfigSection *sect)
00091     : i(*sect)
00092 {
00093 }
00094 
00095 
00096 void UniWvConfGen::WvConfIter::rewind()
00097 {
00098     i.rewind();
00099 }
00100 
00101 
00102 bool UniWvConfGen::WvConfIter::next()
00103 {
00104     return i.next();
00105 }
00106 
00107 
00108 UniConfKey UniWvConfGen::WvConfIter::key() const
00109 {
00110     return i->name;
00111 }

Generated on Wed Dec 15 15:08:10 2004 for WvStreams by  doxygen 1.3.9.1