Maintaining accesses Local Name Server Database. Allows to add NameBindings, change them, remove them and resolve NameBindings. More...
#include <Local_Name_Space_T.h>


Public Types | |
| typedef ACE_Allocator_Adapter < ACE_Malloc< ACE_MEM_POOL_2, ACE_LOCK > > | ALLOCATOR |
Public Member Functions | |
| ACE_Local_Name_Space (void) | |
| "Do-nothing" constructor. | |
| ACE_Local_Name_Space (ACE_Naming_Context::Context_Scope_Type scope_in, ACE_Name_Options *name_options) | |
| int | open (ACE_Naming_Context::Context_Scope_Type scope_in) |
| ~ACE_Local_Name_Space (void) | |
| virtual int | bind (const ACE_NS_WString &name, const ACE_NS_WString &value, const char *type="") |
| Bind a new name to a naming context (Wide character strings). | |
| virtual int | rebind (const ACE_NS_WString &name, const ACE_NS_WString &value, const char *type="") |
| virtual int | unbind (const ACE_NS_WString &name) |
| virtual int | unbind_i (const ACE_NS_WString &name) |
| virtual int | resolve (const ACE_NS_WString &name, ACE_NS_WString &value, char *&type) |
| virtual int | resolve_i (const ACE_NS_WString &name, ACE_NS_WString &value, char *&type) |
| virtual int | list_names (ACE_WSTRING_SET &set, const ACE_NS_WString &pattern) |
| virtual int | list_names_i (ACE_WSTRING_SET &set, const ACE_NS_WString &pattern) |
| virtual int | list_values (ACE_WSTRING_SET &set, const ACE_NS_WString &pattern) |
| virtual int | list_values_i (ACE_WSTRING_SET &set, const ACE_NS_WString &pattern) |
| virtual int | list_types (ACE_WSTRING_SET &set, const ACE_NS_WString &pattern) |
| virtual int | list_types_i (ACE_WSTRING_SET &set, const ACE_NS_WString &pattern) |
| virtual int | list_name_entries (ACE_BINDING_SET &set, const ACE_NS_WString &pattern) |
| virtual int | list_name_entries_i (ACE_BINDING_SET &set, const ACE_NS_WString &pattern) |
| virtual int | list_value_entries (ACE_BINDING_SET &set, const ACE_NS_WString &pattern) |
| virtual int | list_value_entries_i (ACE_BINDING_SET &set, const ACE_NS_WString &pattern) |
| virtual int | list_type_entries (ACE_BINDING_SET &set, const ACE_NS_WString &pattern) |
| virtual int | list_type_entries_i (ACE_BINDING_SET &set, const ACE_NS_WString &pattern) |
| virtual void | dump (void) const |
| Dump the state of the object. | |
| virtual void | dump_i (void) const |
Private Member Functions | |
| int | shared_bind (const ACE_NS_WString &name, const ACE_NS_WString &value, const char *type, int rebind) |
| Factor out code from bind() and rebind(). | |
| int | shared_bind_i (const ACE_NS_WString &name, const ACE_NS_WString &value, const char *type, int rebind) |
| int | create_manager (void) |
| int | create_manager_i (void) |
Private Attributes | |
| ALLOCATOR * | allocator_ |
| Pointer to the allocator. | |
| ACE_Name_Space_Map< ALLOCATOR > * | name_space_map_ |
| Pointer to the allocated map manager. | |
| ACE_Naming_Context::Context_Scope_Type | ns_scope_ |
| ACE_Name_Options * | name_options_ |
| Keep track of the options such as database name etc. | |
| ACE_TCHAR | context_file_ [MAXPATHLEN+MAXNAMELEN] |
| Name of the file used as the backing store. | |
| ACE_LOCK * | lock_ |
| Synchronization variable. | |
Maintaining accesses Local Name Server Database. Allows to add NameBindings, change them, remove them and resolve NameBindings.
Manages a Naming Service for a local name space which includes bindings for node_local and host_local naming contexts. All strings are stored in wide character format. A Name Binding consists of a name (that's the key), a value string and an optional type string (no wide chars).
Definition at line 117 of file Local_Name_Space_T.h.
| typedef ACE_Allocator_Adapter<ACE_Malloc <ACE_MEM_POOL_2, ACE_LOCK> > ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::ALLOCATOR |
Definition at line 228 of file Local_Name_Space_T.h.
| ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::ACE_Local_Name_Space | ( | void | ) |
"Do-nothing" constructor.
Definition at line 359 of file Local_Name_Space_T.cpp.
: allocator_ (0), name_space_map_ (0), name_options_ (0) { ACE_TRACE ("ACE_Local_Name_Space::ACE_Local_Name_Space"); }
| ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::ACE_Local_Name_Space | ( | ACE_Naming_Context::Context_Scope_Type | scope_in, | |
| ACE_Name_Options * | name_options | |||
| ) |
Specifies the scope of this namespace, opens and memory-maps the associated file (if accessible) or contacts the dedicated name server process for NET_LOCAL namespace.
Definition at line 368 of file Local_Name_Space_T.cpp.
| ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::~ACE_Local_Name_Space | ( | void | ) |
Destructor, do some cleanup :TBD: last dtor should "compress" file
Definition at line 379 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::~ACE_Local_Name_Space");
// Remove the map.
delete this->allocator_;
delete this->lock_;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::bind | ( | const ACE_NS_WString & | name, | |
| const ACE_NS_WString & | value, | |||
| const char * | type = "" | |||
| ) | [virtual] |
Bind a new name to a naming context (Wide character strings).
Implements ACE_Name_Space.
Definition at line 263 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::bind");
ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
return this->shared_bind (name, value, type, 0);
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::create_manager | ( | void | ) | [private] |
Allocate the appropriate type of map manager that stores the key/value binding.
Definition at line 389 of file Local_Name_Space_T.cpp.
{
// Note that we *must* use structured exception handling here
// because (1) we may need to commit virtual memory pages and (2)
// C++ exception handling doesn't support resumption.
int result = 0;
ACE_SEH_TRY
{
result = this->create_manager_i ();
}
ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
{
}
return result;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::create_manager_i | ( | void | ) | [private] |
Definition at line 407 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::create_manager_i");
// Get directory name
const ACE_TCHAR *dir = this->name_options_->namespace_dir ();
const ACE_TCHAR *database = this->name_options_->database ();
// Use process name as the file name.
size_t len = ACE_OS::strlen (dir);
len += ACE_OS::strlen (ACE_DIRECTORY_SEPARATOR_STR);
len += ACE_OS::strlen (database) + 1;
if (len >= MAXNAMELEN + MAXPATHLEN)
{
errno = ENAMETOOLONG;
return -1;
}
ACE_OS::strcpy (this->context_file_, dir);
ACE_OS::strcat (this->context_file_, ACE_DIRECTORY_SEPARATOR_STR);
ACE_OS::strcat (this->context_file_, database);
ACE_MEM_POOL_OPTIONS options (this->name_options_->base_address ());
ACE_TCHAR lock_name_for_local_name_space [MAXNAMELEN + MAXPATHLEN];
ACE_TCHAR lock_name_for_backing_store [MAXPATHLEN + MAXNAMELEN];
const ACE_TCHAR *postfix = database;
size_t length = 0;
length = sizeof lock_name_for_local_name_space / sizeof (ACE_TCHAR);
ACE_OS::strsncpy (lock_name_for_local_name_space,
dir,
length);
ACE_OS::strncat (lock_name_for_local_name_space,
ACE_DIRECTORY_SEPARATOR_STR,
length - ACE_OS::strlen (lock_name_for_local_name_space));
ACE_OS::strncat (lock_name_for_local_name_space,
ACE_TEXT ("name_space_"),
length - ACE_OS::strlen (lock_name_for_local_name_space));
ACE_OS::strncat (lock_name_for_local_name_space,
postfix,
length - ACE_OS::strlen (lock_name_for_local_name_space));
length = sizeof lock_name_for_backing_store / sizeof (ACE_TCHAR);
ACE_OS::strsncpy (lock_name_for_backing_store,
dir,
length);
ACE_OS::strncat (lock_name_for_backing_store,
ACE_DIRECTORY_SEPARATOR_STR,
length - ACE_OS::strlen (lock_name_for_backing_store));
ACE_OS::strncat (lock_name_for_backing_store,
ACE_TEXT ("backing_store_"),
length - ACE_OS::strlen (lock_name_for_backing_store));
ACE_OS::strncat (lock_name_for_backing_store,
postfix,
length - ACE_OS::strlen (ACE_TEXT ("backing_store_")));
// Create the allocator with the appropriate options.
ACE_NEW_RETURN (this->allocator_,
ALLOCATOR (this->context_file_,
lock_name_for_backing_store,
&options), -1);
if (ACE_LOG_MSG->op_status ())
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("Allocator::Allocator\n")),
-1);
ACE_NEW_RETURN (this->lock_,
ACE_LOCK (lock_name_for_local_name_space),
-1);
#if !defined (ACE_LACKS_ACCESS)
// Now check if the backing store has been created successfully
if (ACE_OS::access (this->context_file_, F_OK) != 0)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("create_manager\n")),
-1);
#endif /* ACE_LACKS_ACCESS */
void *ns_map = 0;
// This is the easy case since if we find the Name Server Map
// Manager we know it's already initialized.
if (this->allocator_->find (ACE_NAME_SERVER_MAP, ns_map) == 0)
{
this->name_space_map_ = (ACE_Name_Space_Map <ALLOCATOR> *) ns_map;
if (ACE::debug ())
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("name_space_map_ = %@, ns_map = %@\n"),
this->name_space_map_, ns_map));
}
// This is the hard part since we have to avoid potential race
// conditions... We will use the double check here
else
{
ACE_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
// This is the easy case since if we find the Name Server Map
// Manager we know it's already initialized.
if (this->allocator_->find (ACE_NAME_SERVER_MAP, ns_map) == 0)
{
this->name_space_map_ = (ACE_Name_Space_Map <ALLOCATOR> *) ns_map;
if (ACE::debug ())
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("name_space_map_ = %@, ns_map = %@\n"),
this->name_space_map_, ns_map));
}
else
{
size_t map_size = sizeof *this->name_space_map_;
ns_map = this->allocator_->malloc (map_size);
// Initialize the map into its memory location (e.g., shared memory).
this->name_space_map_ =
new (ns_map) ACE_Name_Space_Map <ALLOCATOR> (this->allocator_);
if (this->allocator_->bind (ACE_NAME_SERVER_MAP, ns_map) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("create_manager\n")), -1);
}
if (ACE::debug ())
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("name_space_map_ = %@, ns_map = %@\n"),
this->name_space_map_, ns_map));
}
return 0;
}
| void ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::dump | ( | void | ) | const [virtual] |
Dump the state of the object.
Implements ACE_Name_Space.
Definition at line 942 of file Local_Name_Space_T.cpp.
{
#if defined (ACE_HAS_DUMP)
// Note that we *must* use structured exception handling here
// because (1) we may need to commit virtual memory pages and (2)
// C++ exception handling doesn't support resumption.
// This should really be a const cast
ACE_Local_Name_Space<ACE_MEM_POOL_2, ACE_LOCK> *fake_this =
(ACE_Local_Name_Space<ACE_MEM_POOL_2, ACE_LOCK> *) this;
ACE_UNUSED_ARG (fake_this);
ACE_SEH_TRY
{
this->dump_i ();
}
ACE_SEH_EXCEPT (fake_this->remap (GetExceptionInformation ()))
{
}
#endif /* ACE_HAS_DUMP */
}
| void ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::dump_i | ( | void | ) | const [virtual] |
Definition at line 797 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::dump_i");
ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
MAP_MANAGER::ENTRY *map_entry;
for (map_entry = 0;
map_iterator.next (map_entry) != 0;
map_iterator.advance())
{
char *key = map_entry->ext_id_.char_rep ();
char *value = map_entry->int_id_.value ().char_rep ();
#if !defined (ACE_NLOGGING)
const char *type = map_entry->int_id_.type ();
#endif /* ! ACE_NLOGGING */
ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("key=%C\nvalue=%C\ntype=%C\n"),
key, value, type));
// We need to delete key and value since char_rep allocates
// memory for them
delete [] key;
delete [] value;
}
ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::list_name_entries | ( | ACE_BINDING_SET & | set, | |
| const ACE_NS_WString & | pattern | |||
| ) | [virtual] |
Get a set of names matching a specified pattern (wchars). Matching means the names must begin with the pattern string. Returns the complete binding associated each pattern match.
Implements ACE_Name_Space.
Definition at line 885 of file Local_Name_Space_T.cpp.
{
// Note that we *must* use structured exception handling here
// because (1) we may need to commit virtual memory pages and (2)
// C++ exception handling doesn't support resumption.
int result = 0;
ACE_SEH_TRY
{
result = this->list_name_entries_i (set, pattern);
}
ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
{
}
return result;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::list_name_entries_i | ( | ACE_BINDING_SET & | set, | |
| const ACE_NS_WString & | pattern | |||
| ) | [virtual] |
Definition at line 680 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::list_name_entries_i");
ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
MAP_MANAGER::ENTRY *map_entry;
for (map_entry = 0;
map_iterator.next (map_entry) != 0;
map_iterator.advance())
{
if (map_entry->ext_id_.strstr (pattern) != -1)
{
ACE_Name_Binding entry (map_entry->ext_id_,
map_entry->int_id_.value (),
map_entry->int_id_.type ());
if (set.insert (entry) == -1)
return -1;
}
}
return 0;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::list_names | ( | ACE_WSTRING_SET & | set, | |
| const ACE_NS_WString & | pattern | |||
| ) | [virtual] |
Get a set of names matching a specified pattern (wchars). Matching means the names must begin with the pattern string.
Implements ACE_Name_Space.
Definition at line 828 of file Local_Name_Space_T.cpp.
{
// Note that we *must* use structured exception handling here
// because (1) we may need to commit virtual memory pages and (2)
// C++ exception handling doesn't support resumption.
int result = 0;
ACE_SEH_TRY
{
result = this->list_names_i (set, pattern);
}
ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
{
}
return result;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::list_names_i | ( | ACE_WSTRING_SET & | set, | |
| const ACE_NS_WString & | pattern | |||
| ) | [virtual] |
Definition at line 541 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::list_names_i");
ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
MAP_MANAGER::ENTRY *map_entry;
int result = 1;
for (map_entry = 0;
map_iterator.next (map_entry) != 0;
map_iterator.advance())
{
if (map_entry->ext_id_.strstr (pattern) != -1)
{
ACE_NS_WString entry (map_entry->ext_id_ );
if (set.insert (entry) == -1)
{
result = -1;
break;
}
else
result = 0;
}
}
return result;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::list_type_entries | ( | ACE_BINDING_SET & | set, | |
| const ACE_NS_WString & | pattern | |||
| ) | [virtual] |
Get a set of types matching a specified pattern (wchars). Matching means the types must begin with the pattern string. Returns the complete binding associated each pattern match.
Implements ACE_Name_Space.
Definition at line 923 of file Local_Name_Space_T.cpp.
{
// Note that we *must* use structured exception handling here
// because (1) we may need to commit virtual memory pages and (2)
// C++ exception handling doesn't support resumption.
int result = 0;
ACE_SEH_TRY
{
result = this->list_type_entries_i (set, pattern);
}
ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
{
}
return result;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::list_type_entries_i | ( | ACE_BINDING_SET & | set, | |
| const ACE_NS_WString & | pattern | |||
| ) | [virtual] |
Definition at line 737 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::list_type_entries_i");
ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
MAP_MANAGER::ENTRY *map_entry;
char *compiled_regexp = 0;
// Note that char_rep() allocates memory so we need to delete it
char *pattern_rep = pattern.char_rep ();
// Check for wildcard case first.
if (ACE_OS::strcmp ("", pattern_rep) == 0)
compiled_regexp = ACE_OS::strdup ("");
else
// Compile the regular expression (the 0's cause ACE_OS::compile
// to allocate space).
#if defined (ACE_HAS_REGEX)
compiled_regexp = ACE_OS::compile (pattern_rep, 0, 0);
#else /* If we don't have regular expressions just the pattern
directly. */
compiled_regexp = pattern_rep;
#endif /* ACE_HAS_REGEX */
for (map_entry = 0;
map_iterator.next (map_entry) != 0;
map_iterator.advance ())
{
// Get the type.
const char *type = map_entry->int_id_.type ();
if (ACE_OS::strcmp ("", pattern_rep) == 0 // Everything matches
// the wildcard.
#if defined (ACE_HAS_REGEX)
|| ACE_OS::step (type, compiled_regexp) != 0)
#else /* If we don't have regular expressions just use strstr() for
substring matching. */
|| ACE_OS::strstr (type, compiled_regexp) != 0)
#endif /* ACE_HAS_REGEX */
{
ACE_Name_Binding entry (map_entry->ext_id_,
map_entry->int_id_.value (),
map_entry->int_id_.type ());
if (set.insert (entry) == -1)
return -1;
}
}
#if defined (ACE_HAS_REGEX)
if (compiled_regexp)
ACE_OS::free ((void *) compiled_regexp);
#endif /* ACE_HAS_REGEX */
delete [] pattern_rep; // delete pattern_rep;
return 0;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::list_types | ( | ACE_WSTRING_SET & | set, | |
| const ACE_NS_WString & | pattern | |||
| ) | [virtual] |
Get a set of types matching a specified pattern (wchars). Matching means the types must begin with the pattern string.
Implements ACE_Name_Space.
Definition at line 866 of file Local_Name_Space_T.cpp.
{
// Note that we *must* use structured exception handling here
// because (1) we may need to commit virtual memory pages and (2)
// C++ exception handling doesn't support resumption.
int result = 0;
ACE_SEH_TRY
{
result = this->list_types_i (set, pattern);
}
ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
{
}
return result;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::list_types_i | ( | ACE_WSTRING_SET & | set, | |
| const ACE_NS_WString & | pattern | |||
| ) | [virtual] |
Definition at line 609 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::list_types_i");
ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
MAP_MANAGER::ENTRY *map_entry;
char *compiled_regexp = 0;
// Note that char_rep() allocates memory so we need to delete it
char *pattern_rep = pattern.char_rep ();
// Check for wildcard case first.
if (ACE_OS::strcmp ("", pattern_rep) == 0)
ACE_ALLOCATOR_RETURN (compiled_regexp,
ACE_OS::strdup (""),
-1);
else
// Compile the regular expression (the 0's cause ACE_OS::compile
// to allocate space).
#if defined (ACE_HAS_REGEX)
compiled_regexp = ACE_OS::compile (pattern_rep, 0, 0);
#else
// If we don't have regular expressions just use the pattern
// directly.
compiled_regexp = pattern_rep;
#endif /* ACE_HAS_REGEX */
int result = 1;
for (map_entry = 0;
map_iterator.next (map_entry) != 0;
map_iterator.advance ())
{
// Get the type
const char *type = map_entry->int_id_.type ();
// Everything matches the wildcard.
if (ACE_OS::strcmp ("", pattern_rep) == 0
#if defined (ACE_HAS_REGEX)
|| ACE_OS::step (type, compiled_regexp) != 0)
#else
// If we don't have regular expressions just use strstr() for
// substring matching.
|| ACE_OS::strstr (type, compiled_regexp) != 0)
#endif /* ACE_HAS_REGEX */
{
ACE_NS_WString entry (type);
if (set.insert (entry) == -1)
{
result = -1;
break;
}
else
result = 0;
}
}
#if defined (ACE_HAS_REGEX)
if (compiled_regexp)
ACE_OS::free ((void *) compiled_regexp);
#endif /* ACE_HAS_REGEX */
delete [] pattern_rep; // delete pattern_rep;
return result;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::list_value_entries | ( | ACE_BINDING_SET & | set, | |
| const ACE_NS_WString & | pattern | |||
| ) | [virtual] |
Get a set of values matching a specified pattern (wchars). Matching means the values must begin with the pattern string. Returns the complete binding associated each pattern match.
Implements ACE_Name_Space.
Definition at line 904 of file Local_Name_Space_T.cpp.
{
// Note that we *must* use structured exception handling here
// because (1) we may need to commit virtual memory pages and (2)
// C++ exception handling doesn't support resumption.
int result = 0;
ACE_SEH_TRY
{
result = this->list_value_entries_i (set, pattern);
}
ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
{
}
return result;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::list_value_entries_i | ( | ACE_BINDING_SET & | set, | |
| const ACE_NS_WString & | pattern | |||
| ) | [virtual] |
Definition at line 709 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::list_value_entries_i");
ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
MAP_MANAGER::ENTRY *map_entry;
for (map_entry = 0;
map_iterator.next (map_entry) != 0;
map_iterator.advance ())
{
if (map_entry->int_id_.value ().strstr (pattern) != -1)
{
ACE_Name_Binding entry (map_entry->ext_id_,
map_entry->int_id_.value (),
map_entry->int_id_.type ());
if (set.insert (entry) == -1)
return -1;
}
}
return 0;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::list_values | ( | ACE_WSTRING_SET & | set, | |
| const ACE_NS_WString & | pattern | |||
| ) | [virtual] |
Get a set of values matching a specified pattern (wchars). Matching means the values must begin with the pattern string.
Implements ACE_Name_Space.
Definition at line 847 of file Local_Name_Space_T.cpp.
{
// Note that we *must* use structured exception handling here
// because (1) we may need to commit virtual memory pages and (2)
// C++ exception handling doesn't support resumption.
int result = 0;
ACE_SEH_TRY
{
result = this->list_values_i (set, pattern);
}
ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
{
}
return result;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::list_values_i | ( | ACE_WSTRING_SET & | set, | |
| const ACE_NS_WString & | pattern | |||
| ) | [virtual] |
Definition at line 575 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::list_values_i");
ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
MAP_MANAGER::ENTRY *map_entry;
int result = 1;
for (map_entry = 0;
map_iterator.next (map_entry) != 0;
map_iterator.advance ())
{
if (map_entry->int_id_.value ().strstr (pattern) != -1)
{
ACE_NS_WString entry (map_entry->int_id_.value ());
if (set.insert (entry) == -1)
{
result = -1;
break;
}
else
result = 0;
}
}
return result;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::open | ( | ACE_Naming_Context::Context_Scope_Type | scope_in | ) |
Specifies the scope of this namespace, opens and memory-maps the associated file (if accessible) or contacts the dedicated name server process for NET_LOCAL namespace.
Definition at line 349 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::open");
this->ns_scope_ = scope_in;
return this->create_manager ();
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::rebind | ( | const ACE_NS_WString & | name, | |
| const ACE_NS_WString & | value, | |||
| const char * | type = "" | |||
| ) | [virtual] |
Overwrite the value or type of an existing name in a ACE_Local_Name_Space or bind a new name to the context, if it didn't exist yet. (Wide charcter strings interface).
Implements ACE_Name_Space.
Definition at line 275 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::rebind");
ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
return this->shared_bind (name, value, type, 1);
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::resolve | ( | const ACE_NS_WString & | name, | |
| ACE_NS_WString & | value, | |||
| char *& | type | |||
| ) | [virtual] |
Get value and type of a given name binding (Wide chars). The caller is responsible for deleting type!
Implements ACE_Name_Space.
Definition at line 287 of file Local_Name_Space_T.cpp.
{
// Note that we *must* use structured exception handling here
// because (1) we may need to commit virtual memory pages and (2)
// C++ exception handling doesn't support resumption.
int result = 0;
ACE_SEH_TRY
{
result = this->resolve_i (name, value, type);
}
ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
{
}
return result;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::resolve_i | ( | const ACE_NS_WString & | name, | |
| ACE_NS_WString & | value, | |||
| char *& | type | |||
| ) | [virtual] |
Definition at line 308 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::resolve_i");
ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
ACE_NS_String ns_name (name);
ACE_NS_Internal ns_internal;
ACE_NS_String nbc_string; // Note the classy variable name! :)
if (this->name_space_map_->find (ns_name,
ns_internal,
this->allocator_) != 0)
return -1;
// Calls conversion operator and then calls the ACE_NS_WString
// assignment operator to get a fresh copy. (*#*(@#&!*@!!*@&( HP
// compiler causes us to add an extra copy explicitly !! :)
nbc_string = ns_internal.value ();
value = nbc_string;
// Gets type and then the actual reprsentation which is a
// ACE_WCHAR_T
const char *temp = ns_internal.type ();
size_t len = ACE_OS::strlen (ns_internal.type ());
// Makes a copy here. Caller needs to call delete to free up
// memory.
char *new_type = 0;
ACE_NEW_RETURN (new_type,
char [len + 1],
-1);
ACE_OS::strsncpy (new_type, temp, len + 1);
type = new_type;
return 0;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::shared_bind | ( | const ACE_NS_WString & | name, | |
| const ACE_NS_WString & | value, | |||
| const char * | type, | |||
| int | rebind | |||
| ) | [private] |
Factor out code from bind() and rebind().
Definition at line 117 of file Local_Name_Space_T.cpp.
{
// Note that we *must* use structured exception handling here
// because (1) we may need to commit virtual memory pages and (2)
// C++ exception handling doesn't support resumption.
int result = 0;
ACE_SEH_TRY
{
result = this->shared_bind_i (name, value, type, rebind);
}
ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
{
}
return result;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::shared_bind_i | ( | const ACE_NS_WString & | name, | |
| const ACE_NS_WString & | value, | |||
| const char * | type, | |||
| int | rebind | |||
| ) | [private] |
Definition at line 138 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::shared_bind_i");
const size_t name_len = (name.length () + 1) * sizeof (ACE_WCHAR_T);
const size_t value_len = (value.length () + 1) * sizeof (ACE_WCHAR_T);
const size_t type_len = ACE_OS::strlen (type) + 1;
const size_t total_len = name_len + value_len + type_len;
char *ptr = (char *) this->allocator_->malloc (total_len);
if (ptr == 0)
return -1;
else
{
// Note that the value_rep *must* come first to make sure we can
// retrieve this pointer later on in unbind().
ACE_WCHAR_T *value_rep = (ACE_WCHAR_T *) (ptr);
ACE_WCHAR_T *name_rep = (ACE_WCHAR_T *) (ptr + value_len);
char *new_type = (char *) (ptr + value_len + name_len);
ACE_Auto_Basic_Array_Ptr<ACE_WCHAR_T> name_urep (name.rep ());
ACE_Auto_Basic_Array_Ptr<ACE_WCHAR_T> value_urep (value.rep ());
ACE_NS_String new_name (name_rep, name_urep.get (), name_len);
ACE_NS_String new_value (value_rep, value_urep.get (), value_len);
ACE_OS::strcpy (new_type, type);
ACE_NS_Internal new_internal (new_value, new_type);
int result = -1;
if (rebind == 0)
{
// Do a normal bind. This will fail if there's already an
// <new_internal> with the same name.
result = this->name_space_map_->bind (new_name,
new_internal,
this->allocator_);
if (result == 1)
{
// Entry already existed so bind failed. Free our
// dynamically allocated memory.
this->allocator_->free ((void *) ptr);
return result;
}
}
else
{
// Do a rebind. If there's already any entry, this will
// return the existing <new_name> and <new_internal> and
// overwrite the existing name binding.
ACE_NS_String old_name;
ACE_NS_Internal old_internal;
result = this->name_space_map_->rebind (new_name, new_internal,
old_name, old_internal,
this->allocator_);
if (result == 1)
{
// Free up the memory we allocated in shared_bind().
// Note that this assumes that the "value" pointer comes
// first and that the value, name, and type are
// contiguously allocated (see above for details)
this->allocator_->free ((void *) (old_internal.value ()).fast_rep ());
}
}
if (result == -1)
// Free our dynamically allocated memory.
this->allocator_->free ((void *) ptr);
else
// If bind() or rebind() succeed, they will automatically sync
// up the map manager entry. However, we must sync up our
// name/value memory.
this->allocator_->sync (ptr, total_len);
return result;
}
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::unbind | ( | const ACE_NS_WString & | name | ) | [virtual] |
Delete a name from a ACE_Local_Name_Space (Wide charcter strings Interface).
Implements ACE_Name_Space.
Definition at line 222 of file Local_Name_Space_T.cpp.
{
// Note that we *must* use structured exception handling here
// because (1) we may need to commit virtual memory pages and (2)
// C++ exception handling doesn't support resumption.
int result = 0;
ACE_SEH_TRY
{
result = this->unbind_i (name);
}
ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
{
}
return result;
}
| int ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::unbind_i | ( | const ACE_NS_WString & | name | ) | [virtual] |
Definition at line 241 of file Local_Name_Space_T.cpp.
{
ACE_TRACE ("ACE_Local_Name_Space::unbind_i");
ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
ACE_NS_String ns_name (name);
ACE_NS_Internal ns_internal;
if (this->name_space_map_->unbind (ns_name,
ns_internal,
this->allocator_) != 0)
return -1;
// Free up the memory we allocated in shared_bind(). Note that this
// assumes that the "value" pointer comes first and that the value,
// name and type are contiguously allocated (see shared_bind() for
// details)
this->allocator_->free ((void *) (ns_internal.value ()).fast_rep ());
return 0;
}
ALLOCATOR* ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::allocator_ [private] |
Pointer to the allocator.
Definition at line 250 of file Local_Name_Space_T.h.
ACE_TCHAR ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::context_file_[MAXPATHLEN+MAXNAMELEN] [private] |
Name of the file used as the backing store.
Definition at line 263 of file Local_Name_Space_T.h.
ACE_LOCK* ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::lock_ [private] |
Synchronization variable.
Definition at line 266 of file Local_Name_Space_T.h.
ACE_Name_Options* ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::name_options_ [private] |
Keep track of the options such as database name etc.
Definition at line 260 of file Local_Name_Space_T.h.
ACE_Name_Space_Map<ALLOCATOR>* ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::name_space_map_ [private] |
Pointer to the allocated map manager.
Definition at line 253 of file Local_Name_Space_T.h.
ACE_Naming_Context::Context_Scope_Type ACE_Local_Name_Space< ACE_MEM_POOL_1, ACE_LOCK >::ns_scope_ [private] |
Scope of this naming context (e.g., PROC_LOCAL, NODE_LOCAL, or NET_LOCAL).
Definition at line 257 of file Local_Name_Space_T.h.
1.7.0