WvStreams
unifiltergen.cc
1 /*
2  * Worldvisions Weaver Software:
3  * Copyright (C) 2002 Net Integration Technologies, Inc.
4  *
5  * A UniConfGen framework to simplify writing filtering generators.
6  */
7 #include "unifiltergen.h"
8 
9 /***** UniFilterGen *****/
10 
11 UniFilterGen::UniFilterGen(IUniConfGen *inner)
12  : xinner(NULL)
13 {
14  setinner(inner);
15 }
16 
17 
18 UniFilterGen::~UniFilterGen()
19 {
20  IUniConfGen *gen = xinner;
21  setinner(NULL);
22  WVRELEASE(gen);
23 }
24 
25 
27 {
28  if (xinner)
29  xinner->del_callback(this);
30  xinner = inner;
31  if (xinner)
32  xinner->add_callback(this, wv::bind(&UniFilterGen::gencallback, this,
33  _1, _2));
34 }
35 
36 
37 bool UniFilterGen::keymap(const UniConfKey &unmapped_key, UniConfKey &mapped_key)
38 {
39  // by default, don't rename the key
40  mapped_key = unmapped_key;
41  return true;
42 }
43 
44 bool UniFilterGen::reversekeymap(const UniConfKey &mapped_key, UniConfKey &unmapped_key)
45 {
46  // by default, don't rename the key
47  unmapped_key = mapped_key;
48  return true;
49 }
50 
51 
53 {
54  if (xinner)
55  xinner->commit();
56 }
57 
58 
60 {
61  if (xinner)
62  return xinner->refresh();
63  else
64  return false;
65 }
66 
67 
68 void UniFilterGen::prefetch(const UniConfKey &key, bool recursive)
69 {
70  UniConfKey mapped_key;
71  if (xinner && keymap(key, mapped_key))
72  xinner->prefetch(mapped_key, recursive);
73 }
74 
75 
77 {
78  UniConfKey mapped_key;
79  if (xinner && keymap(key, mapped_key))
80  return xinner->get(mapped_key);
81  else
82  return WvString::null;
83 }
84 
85 
87 {
88  if (xinner)
89  xinner->flush_buffers();
90 }
91 
92 
93 void UniFilterGen::set(const UniConfKey &key, WvStringParm value)
94 {
95  UniConfKey mapped_key;
96  if (xinner && keymap(key, mapped_key))
97  xinner->set(mapped_key, value);
98 }
99 
100 
101 void UniFilterGen::setv(const UniConfPairList &pairs)
102 {
103  if (xinner)
104  xinner->setv(pairs);
105 }
106 
107 
109 {
110  UniConfKey mapped_key;
111  if (xinner && keymap(key, mapped_key))
112  return xinner->exists(mapped_key);
113  else
114  return false;
115 }
116 
117 
119 {
120  UniConfKey mapped_key;
121  if (xinner && keymap(key, mapped_key))
122  return xinner->haschildren(mapped_key);
123  else
124  return false;
125 }
126 
127 
129 {
130  if (xinner)
131  return xinner->isok();
132  else
133  return false;
134 }
135 
136 
138 {
139  UniConfKey mapped_key;
140  if (xinner && keymap(key, mapped_key))
141  return xinner->iterator(mapped_key);
142  else
143  return NULL;
144 }
145 
146 
148 {
149  UniConfKey mapped_key;
150  if (xinner && keymap(key, mapped_key))
151  return xinner->recursiveiterator(mapped_key);
152  else
153  return NULL;
154 }
155 
156 
158 {
159  UniConfKey unmapped_key;
160  if (xinner && reversekeymap(key, unmapped_key))
161  delta(unmapped_key, value);
162 }