WvStreams
|
00001 /* -*- Mode: C++ -*- 00002 * Worldvisions Weaver Software: 00003 * Copyright (C) 1997-2002 Net Integration Technologies, Inc. 00004 * 00005 * Defines a UniConfGen that manages a tree of UniConfGen instances. 00006 */ 00007 #ifndef __UNIMOUNTGEN_H 00008 #define __UNIMOUNTGEN_H 00009 00010 #include "uniconfgen.h" 00011 #include "wvmoniker.h" 00012 #include "wvstringlist.h" 00013 #include "wvtr1.h" 00014 00015 00017 class UniMountGen : public UniConfGen 00018 { 00019 protected: 00020 00021 // Class to hold the generator with its mountpoint 00022 class UniGenMount 00023 { 00024 public: 00025 UniGenMount(IUniConfGen *gen, const UniConfKey &key) 00026 : gen(gen), key(key) 00027 { } 00028 00029 xplc_ptr<IUniConfGen> gen; 00030 UniConfKey key; 00031 }; 00032 00033 typedef class WvList<UniGenMount> MountList; 00034 MountList mounts; 00035 00037 UniMountGen(const UniMountGen &other); 00038 00039 public: 00041 UniMountGen(); 00042 00044 virtual ~UniMountGen(); 00045 00046 void zap(); 00047 00053 virtual IUniConfGen *mount(const UniConfKey &key, 00054 WvStringParm moniker, 00055 bool refresh); 00056 00066 virtual IUniConfGen *mountgen(const UniConfKey &key, 00067 IUniConfGen *gen, 00068 bool refresh); 00069 00076 virtual void unmount(IUniConfGen *gen, bool commit); 00077 00090 virtual IUniConfGen *whichmount(const UniConfKey &key, 00091 UniConfKey *mountpoint); 00092 00094 virtual bool ismountpoint(const UniConfKey &key); 00095 00096 /***** Overridden members *****/ 00097 00098 virtual bool exists(const UniConfKey &key); 00099 virtual bool haschildren(const UniConfKey &key); 00100 virtual WvString get(const UniConfKey &key); 00101 virtual void set(const UniConfKey &key, WvStringParm value); 00102 virtual void setv(const UniConfPairList &pairs); 00103 virtual void commit(); 00104 virtual bool refresh(); 00105 virtual void flush_buffers() { } 00106 virtual Iter *iterator(const UniConfKey &key); 00107 virtual Iter *recursiveiterator(const UniConfKey &key); 00108 00109 private: 00111 UniGenMount *findmount(const UniConfKey &key); 00114 UniGenMount *findmountunder(const UniConfKey &key); 00115 00116 // Trim the key so it matches the generator starting point 00117 UniConfKey trimkey(const UniConfKey &foundkey, const UniConfKey &key) 00118 { return key.removefirst(foundkey.numsegments()); } 00119 00121 void gencallback(const UniConfKey &base, const UniConfKey &key, 00122 WvStringParm value); 00123 00124 void makemount(const UniConfKey &key); 00125 00129 bool has_subkey(const UniConfKey &key, UniGenMount *found = NULL); 00130 00131 struct UniGenMountPairs; 00132 DeclareWvDict(UniGenMountPairs, WvFastString, key); 00133 00134 }; 00135 00136 #endif //__UNIMOUNTGEN_H