1 // $Id: Registry_Name_Space.cpp 80826 2008-03-04 14:51:23Z wotte $
3 #include "ace/Registry_Name_Space.h"
5 ACE_RCSID(ace
, Registry_Name_Space
, "$Id: Registry_Name_Space.cpp 80826 2008-03-04 14:51:23Z wotte $")
7 #if (defined (ACE_WIN32) && defined (ACE_USES_WCHAR))
8 // This only works on Win32 platforms when ACE_USES_WCHAR is turned on
10 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
12 ACE_Registry_Name_Space::ACE_Registry_Name_Space (void)
16 ACE_Registry_Name_Space::ACE_Registry_Name_Space (ACE_Name_Options
*name_options
)
18 if (this->open (name_options
) != 0)
19 ACE_ERROR ((LM_ERROR
, ACE_TEXT ("%p\n"),
20 ACE_TEXT ("ACE_Registry_Name_Space::open")));
24 ACE_Registry_Name_Space::~ACE_Registry_Name_Space (void)
30 ACE_Registry_Name_Space::open (ACE_Name_Options
*name_options
)
32 const ACE_TCHAR
*host
= name_options
->nameserver_host ();
33 ACE_Registry::Naming_Context predefined
;
35 int result
= ACE_Predefined_Naming_Contexts::connect (predefined
,
39 ACE_ERROR_RETURN ((LM_ERROR
, ACE_TEXT ("%p\n"),
40 ACE_TEXT ("ACE_Predefined_Naming_Context::connect")),
45 ACE_TString name
= name_options
->namespace_dir ();
47 name
+= ACE_Registry::STRING_SEPARATOR
;
49 name
+= name_options
->database ();
51 // Create new context or bind to existing one
52 result
= predefined
.bind_context (name
,
55 ACE_ERROR_RETURN ((LM_ERROR
, ACE_TEXT ("%p\n"), ACE_TEXT ("ACE_Registry::Naming_Context::bind_context")), result
);
62 ACE_Registry_Name_Space::bind (const ACE_NS_WString
&name
,
63 const ACE_NS_WString
&value
,
69 const ACE_WSTRING_TYPE
*data
= value
.fast_rep ();
72 size_t size
= value
.length () * sizeof (ACE_WSTRING_TYPE
);
74 // Represent value as an ACE_Registry::Object
75 ACE_Registry::Object
object ((void *) data
,
76 static_cast<u_long
> (size
),
78 // Add new <key>/<value> pair
79 #if defined ACE_USES_WCHAR
80 return this->context_
.bind (name
.fast_rep(),
83 return this->context_
.bind (name
.char_rep(),
85 #endif /* ACE_HAS_WCHAR */
90 ACE_Registry_Name_Space::rebind (const ACE_NS_WString
&name
,
91 const ACE_NS_WString
&value
,
97 const ACE_WSTRING_TYPE
*data
= value
.fast_rep ();
100 size_t size
= value
.length () * sizeof (ACE_WSTRING_TYPE
);
102 // Represent value as an ACE_Registry::Object
103 ACE_Registry::Object
object ((void *) data
,
104 static_cast<u_long
> (size
),
106 // Add new <key>/<value> pair
107 #if defined (ACE_USES_WCHAR)
108 return this->context_
.rebind (name
.fast_rep (),
111 return this->context_
.rebind (name
.char_rep (),
113 #endif /* ACE_USES_WCHAR */
118 ACE_Registry_Name_Space::unbind (const ACE_NS_WString
&name
)
120 #if defined (ACE_USES_WCHAR)
121 return this->context_
.unbind (name
.fast_rep ());
123 return this->context_
.unbind (name
.char_rep ());
124 #endif /* ACE_USES_WCHAR */
129 ACE_Registry_Name_Space::resolve (const ACE_NS_WString
&name
,
130 ACE_NS_WString
&value
,
133 ACE_UNUSED_ARG(type
);
135 // This object will be used to query the size of the data.
136 // Note: The query_object.data will be null for this invocation.
137 ACE_Registry::Object query_object
;
139 #if defined (ACE_USES_WCHAR)
140 this->context_
.resolve (name
.fast_rep (), query_object
);
142 this->context_
.resolve (name
.char_rep (), query_object
);
143 #endif /* ACE_USES_WCHAR */
147 // Resize the value passed by the user
148 // Note: -1 is used because the size includes the null terminator
149 value
.resize ((query_object
.size () - 1) / sizeof (ACE_WSTRING_TYPE
));
151 // Represent new space as an ACE_Registry::Object
152 ACE_Registry::Object
object ((void *) value
.fast_rep (),
153 query_object
.size (),
156 #if defined (ACE_USES_WCHAR)
157 result
= this->context_
.resolve (name
.fast_rep (), object
);
159 result
= this->context_
.resolve (name
.char_rep (), object
);
160 #endif /* ACE_USES_WCHAR */
161 if (object
.size () != query_object
.size ())
171 ACE_Registry_Name_Space:: list_names (ACE_WSTRING_SET
&set
,
172 const ACE_NS_WString
&pattern
)
174 ACE_BINDING_SET binding_set
;
175 int result
= this->list_name_entries (binding_set
,
180 ACE_BINDING_ITERATOR
iterator (binding_set
);
182 for (ACE_Name_Binding
*entry
= 0;
183 iterator
.next (entry
) !=0;
186 set
.insert (entry
->name_
);
193 ACE_Registry_Name_Space::list_values (ACE_WSTRING_SET
&set
,
194 const ACE_NS_WString
&pattern
)
196 ACE_BINDING_SET binding_set
;
197 int result
= this->list_name_entries (binding_set
,
202 ACE_BINDING_ITERATOR
iterator (binding_set
);
204 for (ACE_Name_Binding
*entry
= 0;
205 iterator
.next (entry
) !=0;
208 set
.insert (entry
->value_
);
215 ACE_Registry_Name_Space::list_types (ACE_WSTRING_SET
&set
,
216 const ACE_NS_WString
&pattern
)
219 ACE_UNUSED_ARG(pattern
);
226 ACE_Registry_Name_Space::list_name_entries (ACE_BINDING_SET
&set
,
227 const ACE_NS_WString
&pattern
)
229 ACE_UNUSED_ARG(pattern
);
231 ACE_Registry::Binding_List list
;
232 int result
= this->context_
.list (list
);
236 // Iterator through all entries
237 for (ACE_Registry::Binding_List::iterator i
= list
.begin ();
241 // Yeeesss! STL rules!
242 ACE_Registry::Binding
&binding
= *i
;
244 if (binding
.type () == ACE_Registry::OBJECT
)
247 ACE_TString string
= binding
.name ();
248 ACE_NS_WString
key (string
.c_str ());
251 ACE_NS_WString value
;
253 result
= this->resolve (key
,
257 ACE_ERROR_RETURN ((LM_ERROR
, ACE_TEXT ("%p\n"), ACE_TEXT ("ACE_Registry::Naming_Context::resolve")), result
);
260 ACE_Name_Binding
binding (key
, value
, type
);
261 set
.insert (binding
);
269 ACE_Registry_Name_Space::list_value_entries (ACE_BINDING_SET
&set
,
270 const ACE_NS_WString
&pattern
)
272 return this->list_name_entries (set
, pattern
);
277 ACE_Registry_Name_Space::list_type_entries (ACE_BINDING_SET
&set
,
278 const ACE_NS_WString
&pattern
)
280 return this->list_name_entries (set
, pattern
);
285 ACE_Registry_Name_Space::dump (void) const
287 #if defined (ACE_HAS_DUMP)
288 #endif /* ACE_HAS_DUMP */
291 ACE_END_VERSIONED_NAMESPACE_DECL
293 #endif /* ACE_WIN32 && ACE_USES_WCHAR */