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{
21public:
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};
41DeclareWvList(UniWatchInfo);
42
43
48class UniWatchInfoTree : public UniConfTree<UniWatchInfoTree>
49{
50public:
51 UniWatchInfoList watches;
52
56
59 { return haschildren() || ! watches.isempty(); }
60};
61
62
73class 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
84public:
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
129private:
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
151protected:
152 friend class UniUnwrapGen;
153 UniMountGen mounts;
154
155public:
157 static void setbool_callback(bool *flag, const UniConf &,
158 const UniConfKey &)
159 { *flag = true; }
160
161};
162
163#endif //__UNICONFROOT_H
A default implementation of IUniConfGen, providing various handy features that save trouble when impl...
Definition: uniconfgen.h:200
Represents a UniConf key which is a path in a hierarchy structured much like the traditional Unix fil...
Definition: uniconfkey.h:39
static UniConfKey EMPTY
Definition: uniconfkey.h:171
Represents the root of a hierarhical registry consisting of pairs of UniConfKeys and associated strin...
Definition: uniconfroot.h:74
void add_callback(void *cookie, const UniConfKey &key, const UniConfCallback &callback, bool recurse=true)
Requests notification when any of the keys covered by the recursive depth specification change by inv...
Definition: uniconfroot.cc:87
UniConfRoot()
Creates an empty UniConf tree with no mounted stores.
Definition: uniconfroot.cc:14
static void setbool_callback(bool *flag, const UniConf &, const UniConfKey &)
Internal callback for setbool style notifications.
Definition: uniconfroot.h:157
void del_callback(void *cookie, const UniConfKey &key, bool recurse=true)
Cancels notification requested using add_callback().
Definition: uniconfroot.cc:106
void del_setbool(const UniConfKey &key, bool *flag, bool recurse=true)
Cancels notification requested using add_setbool().
Definition: uniconfroot.cc:136
~UniConfRoot()
Destroys the UniConf tree along with all uncommitted data.
Definition: uniconfroot.cc:70
void add_setbool(const UniConfKey &key, bool *flag, bool recurse=true)
Requests notification when any of the keys covered by the recursive depth specification change by set...
Definition: uniconfroot.cc:128
A recursively composed dictionary for tree-structured data indexed by UniConfKey.
Definition: uniconftree.h:24
UniWatchInfoTree * parent() const
Returns a pointer to the parent node, or NULL if there is none.
Definition: uniconftree.h:40
This iterator walks through all immediate children of a UniConf node.
Definition: uniconf.h:436
This iterator performs depth-first traversal of a subtree.
Definition: uniconf.h:467
UniConf instances function as handles to subtrees of a UniConf tree and expose a high-level interface...
Definition: uniconf.h:51
UniConfKey key() const
Returns the path of this node relative to its parent.
Definition: uniconf.h:111
bool refresh() const
Refreshes information about this key recursively.
Definition: uniconf.cc:119
const UniConfKey & key() const
Returns the key field.
Definition: unihashtree.h:40
bool haschildren() const
Returns true if the node has children.
Definition: unihashtree.cc:114
The UniMountTree implementation realized as a UniConfGen.
Definition: unimountgen.h:18
Deprecated: a UniConfGen that delegates all requests to an inner UniConf.
Definition: uniunwrapgen.h:34
bool isessential()
Returns true if the node should not be pruned.
Definition: uniconfroot.h:58
bool recursive()
Returns watch recursion.
Definition: uniconfroot.h:30
void notify(const UniConf &cfg, const UniConfKey &key)
Notifies that a key has changed.
Definition: uniconfroot.h:34
bool operator==(const UniWatchInfo &other) const
Equality test.
Definition: uniconfroot.h:38
A WvFastString acts exactly like a WvString, but can take (const char *) strings without needing to a...
Definition: wvstring.h:94