WvStreams
uniregistrygen.h
1 /* -*- Mode: C++ -*-
2  * Worldvisions Weaver Software:
3  * Copyright (C) 1997-2003 Net Integration Technologies, Inc.
4  *
5  * A generator that exposes the windows registry.
6  *
7  * When linking statically, use the following #pragma to ensure this
8  * generator gets registered:
9  * #pragma comment(linker, "/include:?UniRegistryGenMoniker@@3V?$WvMoniker@VUniConfGen@@@@A")
10  */
11 #ifndef __UNICONFREGISTRY_H
12 #define __UNICONFREGISTRY_H
13 
14 #include "uniconfgen.h"
15 #include "wvlog.h"
16 #include "windows.h"
17 
24 class UniRegistryGen : public UniConfGen
25 {
26  WvLog m_log;
27  HKEY m_hRoot;
28 
29 protected:
30  virtual void flush_buffers() { }
31 
32 public:
33  UniRegistryGen(WvString _base);
34  virtual ~UniRegistryGen();
35 
36  /***** Overridden methods *****/
37 
38  virtual bool isok();
39  virtual WvString get(const UniConfKey &key);
40  virtual void set(const UniConfKey &key, WvStringParm value);
41  virtual void setv(const UniConfPairList &pairs);
42  virtual bool exists(const UniConfKey &key);
43  virtual bool haschildren(const UniConfKey &key);
44  virtual Iter *iterator(const UniConfKey &key);
45 };
46 
48 {
49 public:
50  UniRegistryGenIter(UniRegistryGen &gen, const UniConfKey &key, HKEY base);
51 
53  virtual ~UniRegistryGenIter();
54 
59  virtual void rewind();
60 
66  virtual bool next();
67 
69  virtual UniConfKey key() const;
70 
72  virtual WvString value() const;
73 
74 private:
75  LONG next_key();
76  LONG next_value();
77 
78  HKEY m_hKey;
79  enum Enumerating { KEYS, VALUES } m_enumerating;
80  unsigned m_index;
81  UniRegistryGen &gen;
82  const UniConfKey parent;
83  UniConfKey current_key;
84  const HKEY m_dontClose;
85 };
86 
87 #endif // __UNICONFREGISTRY_H