WvStreams
uniconfroot.h
1 /* -*- Mode: C++ -*-
2  * Worldvisions Weaver Software:
3  * Copyright (C) 1997-2002 Net Integration Technologies, Inc.
4  *
5  * Defines the root management class for UniConf.
6  */
7 #ifndef __UNICONFROOT_H
8 #define __UNICONFROOT_H
9 
10 #include "uniconf.h"
11 #include "uniconftree.h"
12 #include "unimountgen.h"
13 
14 
20 {
21 public:
22  void *cookie;
23  bool recurse;
24  UniConfCallback cb;
25 
26  UniWatchInfo(void *_cookie, bool _recurse, UniConfCallback _cb)
27  : cookie(_cookie), recurse(_recurse), cb(_cb) { }
28 
30  bool recursive()
31  { return recurse; }
32 
34  void notify(const UniConf &cfg, const UniConfKey &key)
35  { cb(cfg, key); }
36 
38  bool operator== (const UniWatchInfo &other) const
39  { return other.cookie == cookie; }
40 };
41 DeclareWvList(UniWatchInfo);
42 
43 
48 class UniWatchInfoTree : public UniConfTree<UniWatchInfoTree>
49 {
50 public:
51  UniWatchInfoList watches;
52 
56 
58  bool isessential()
59  { return haschildren() || ! watches.isempty(); }
60 };
61 
62 
73 class UniConfRoot : public UniConf
74 {
75  friend class UniConf;
76  friend class UniConf::Iter;
77  friend class UniConf::RecursiveIter;
78 
79  UniWatchInfoTree watchroot;
80 
82  UniConfRoot(const UniConfRoot &other);
83 
84 public:
86  UniConfRoot();
87 
93  UniConfRoot(WvStringParm moniker, bool refresh = true);
94 
100  UniConfRoot(UniConfGen *gen, bool refresh = true);
101 
103  ~UniConfRoot();
104 
109  void add_callback(void *cookie, const UniConfKey &key,
110  const UniConfCallback &callback, bool recurse = true);
111 
115  void del_callback(void *cookie, const UniConfKey &key,
116  bool recurse = true);
117 
122  void add_setbool(const UniConfKey &key, bool *flag, bool recurse = true);
123 
127  void del_setbool(const UniConfKey &key, bool *flag, bool recurse = true);
128 
129 private:
136  void check(UniWatchInfoTree *node, const UniConfKey &key, int segleft);
137 
143  void deletioncheck(UniWatchInfoTree *node, const UniConfKey &key);
144 
146  void prune(UniWatchInfoTree *node);
147 
149  void gen_callback(const UniConfKey &key, WvStringParm value);
150 
151 protected:
152  friend class UniUnwrapGen;
153  UniMountGen mounts;
154 
155 public:
157  static void setbool_callback(bool *flag, const UniConf &,
158  const UniConfKey &)
159  { *flag = true; }
160 
161 };
162 
163 #endif //__UNICONFROOT_H