1 #include "ace/Registry_Name_Space.h"
5 #if (defined (ACE_WIN32) && defined (ACE_USES_WCHAR))
6 // This only works on Win32 platforms when ACE_USES_WCHAR is turned on
8 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
10 ACE_Registry_Name_Space::ACE_Registry_Name_Space (void)
14 ACE_Registry_Name_Space::ACE_Registry_Name_Space (ACE_Name_Options
*name_options
)
16 if (this->open (name_options
) != 0)
17 ACELIB_ERROR ((LM_ERROR
, ACE_TEXT ("%p\n"),
18 ACE_TEXT ("ACE_Registry_Name_Space::open")));
22 ACE_Registry_Name_Space::~ACE_Registry_Name_Space (void)
28 ACE_Registry_Name_Space::open (ACE_Name_Options
*name_options
)
30 const ACE_TCHAR
*host
= name_options
->nameserver_host ();
31 ACE_Registry::Naming_Context predefined
;
33 int result
= ACE_Predefined_Naming_Contexts::connect (predefined
,
37 ACELIB_ERROR_RETURN ((LM_ERROR
, ACE_TEXT ("%p\n"),
38 ACE_TEXT ("ACE_Predefined_Naming_Context::connect")),
43 ACE_TString name
= name_options
->namespace_dir ();
45 name
+= ACE_Registry::STRING_SEPARATOR
;
47 name
+= name_options
->database ();
49 // Create new context or bind to existing one
50 result
= predefined
.bind_context (name
,
53 ACELIB_ERROR_RETURN ((LM_ERROR
, ACE_TEXT ("%p\n"), ACE_TEXT ("ACE_Registry::Naming_Context::bind_context")), result
);
60 ACE_Registry_Name_Space::bind (const ACE_NS_WString
&name
,
61 const ACE_NS_WString
&value
,
67 const ACE_WSTRING_TYPE
*data
= value
.fast_rep ();
70 size_t size
= value
.length () * sizeof (ACE_WSTRING_TYPE
);
72 // Represent value as an ACE_Registry::Object
73 ACE_Registry::Object
object ((void *) data
,
74 static_cast<u_long
> (size
),
76 // Add new <key>/<value> pair
77 #if defined ACE_USES_WCHAR
78 return this->context_
.bind (name
.fast_rep(),
81 return this->context_
.bind (name
.char_rep(),
83 #endif /* ACE_HAS_WCHAR */
88 ACE_Registry_Name_Space::rebind (const ACE_NS_WString
&name
,
89 const ACE_NS_WString
&value
,
95 const ACE_WSTRING_TYPE
*data
= value
.fast_rep ();
98 size_t size
= value
.length () * sizeof (ACE_WSTRING_TYPE
);
100 // Represent value as an ACE_Registry::Object
101 ACE_Registry::Object
object ((void *) data
,
102 static_cast<u_long
> (size
),
104 // Add new <key>/<value> pair
105 #if defined (ACE_USES_WCHAR)
106 return this->context_
.rebind (name
.fast_rep (),
109 return this->context_
.rebind (name
.char_rep (),
111 #endif /* ACE_USES_WCHAR */
116 ACE_Registry_Name_Space::unbind (const ACE_NS_WString
&name
)
118 #if defined (ACE_USES_WCHAR)
119 return this->context_
.unbind (name
.fast_rep ());
121 return this->context_
.unbind (name
.char_rep ());
122 #endif /* ACE_USES_WCHAR */
127 ACE_Registry_Name_Space::resolve (const ACE_NS_WString
&name
,
128 ACE_NS_WString
&value
,
131 ACE_UNUSED_ARG(type
);
133 // This object will be used to query the size of the data.
134 // Note: The query_object.data will be null for this invocation.
135 ACE_Registry::Object query_object
;
137 #if defined (ACE_USES_WCHAR)
138 this->context_
.resolve (name
.fast_rep (), query_object
);
140 this->context_
.resolve (name
.char_rep (), query_object
);
141 #endif /* ACE_USES_WCHAR */
145 // Resize the value passed by the user
146 // Note: -1 is used because the size includes the null terminator
147 value
.resize ((query_object
.size () - 1) / sizeof (ACE_WSTRING_TYPE
));
149 // Represent new space as an ACE_Registry::Object
150 ACE_Registry::Object
object ((void *) value
.fast_rep (),
151 query_object
.size (),
154 #if defined (ACE_USES_WCHAR)
155 result
= this->context_
.resolve (name
.fast_rep (), object
);
157 result
= this->context_
.resolve (name
.char_rep (), object
);
158 #endif /* ACE_USES_WCHAR */
159 if (object
.size () != query_object
.size ())
169 ACE_Registry_Name_Space:: list_names (ACE_WSTRING_SET
&set
,
170 const ACE_NS_WString
&pattern
)
172 ACE_BINDING_SET binding_set
;
173 int result
= this->list_name_entries (binding_set
,
178 ACE_BINDING_ITERATOR
iterator (binding_set
);
180 for (ACE_Name_Binding
*entry
= 0;
181 iterator
.next (entry
) !=0;
184 set
.insert (entry
->name_
);
191 ACE_Registry_Name_Space::list_values (ACE_WSTRING_SET
&set
,
192 const ACE_NS_WString
&pattern
)
194 ACE_BINDING_SET binding_set
;
195 int result
= this->list_name_entries (binding_set
,
200 ACE_BINDING_ITERATOR
iterator (binding_set
);
202 for (ACE_Name_Binding
*entry
= 0;
203 iterator
.next (entry
) !=0;
206 set
.insert (entry
->value_
);
213 ACE_Registry_Name_Space::list_types (ACE_WSTRING_SET
&set
,
214 const ACE_NS_WString
&pattern
)
217 ACE_UNUSED_ARG(pattern
);
224 ACE_Registry_Name_Space::list_name_entries (ACE_BINDING_SET
&set
,
225 const ACE_NS_WString
&pattern
)
227 ACE_UNUSED_ARG(pattern
);
229 ACE_Registry::Binding_List list
;
230 int result
= this->context_
.list (list
);
234 // Iterator through all entries
235 for (ACE_Registry::Binding_List::iterator i
= list
.begin ();
239 // Yeeesss! STL rules!
240 ACE_Registry::Binding
&binding
= *i
;
242 if (binding
.type () == ACE_Registry::OBJECT
)
245 ACE_TString string
= binding
.name ();
246 ACE_NS_WString
key (string
.c_str ());
249 ACE_NS_WString value
;
251 result
= this->resolve (key
,
255 ACELIB_ERROR_RETURN ((LM_ERROR
,
257 ACE_TEXT ("ACE_Registry::Naming_Context::resolve")),
261 ACE_Name_Binding
binding (key
, value
, type
);
262 set
.insert (binding
);
270 ACE_Registry_Name_Space::list_value_entries (ACE_BINDING_SET
&set
,
271 const ACE_NS_WString
&pattern
)
273 return this->list_name_entries (set
, pattern
);
278 ACE_Registry_Name_Space::list_type_entries (ACE_BINDING_SET
&set
,
279 const ACE_NS_WString
&pattern
)
281 return this->list_name_entries (set
, pattern
);
286 ACE_Registry_Name_Space::dump (void) const
288 #if defined (ACE_HAS_DUMP)
289 #endif /* ACE_HAS_DUMP */
292 ACE_END_VERSIONED_NAMESPACE_DECL
294 #endif /* ACE_WIN32 && ACE_USES_WCHAR */