#include <Local_Name_Space_T.h>
Inheritance diagram for ACE_Local_Name_Space<, ACE_LOCK >:


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 | remap (EXCEPTION_POINTERS *ep) | 
| Remap the backing store.   | |
| 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.   | |
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.
      
  | 
  |||||
| 
 
 Definition at line 228 of file Local_Name_Space_T.h. Referenced by ACE_Local_Name_Space<, ACE_LOCK >::create_manager_i().  | 
  
      
  | 
  ||||||||||
| 
 "Do-nothing" constructor. 
 Definition at line 359 of file Local_Name_Space_T.cpp. References ACE_TRACE. 
 00360 : allocator_ (0), 00361 name_space_map_ (0), 00362 name_options_ (0) 00363 { 00364 ACE_TRACE ("ACE_Local_Name_Space::ACE_Local_Name_Space"); 00365 }  | 
  
      
  | 
  ||||||||||||||||
| 
 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. References ACE_ERROR, ACE_TEXT, ACE_TRACE, LM_ERROR, and ACE_Local_Name_Space<, ACE_LOCK >::open(). 
 00371 : name_options_ (name_options) 00372 { 00373 ACE_TRACE ("ACE_Local_Name_Space::ACE_Local_Name_Space"); 00374 if (this->open (scope_in) == -1) 00375 ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("ACE_Local_Name_Space::ACE_Local_Name_Space"))); 00376 }  | 
  
      
  | 
  ||||||||||
| 
 Destructor, do some cleanup :TBD: last dtor should "compress" file Definition at line 379 of file Local_Name_Space_T.cpp. References ACE_TRACE. 
 00380 {
00381   ACE_TRACE ("ACE_Local_Name_Space::~ACE_Local_Name_Space");
00382 
00383   // Remove the map.
00384   delete this->allocator_;
00385   delete this->lock_;
00386 }
 | 
  
      
  | 
  ||||||||||||||||||||
| 
 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. References ACE_TRACE, ACE_WRITE_GUARD_RETURN, and ACE_Local_Name_Space<, ACE_LOCK >::shared_bind(). 
 00267 {
00268   ACE_TRACE ("ACE_Local_Name_Space::bind");
00269   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
00270 
00271   return this->shared_bind (name, value, type, 0);
00272 }
 | 
  
      
  | 
  ||||||||||
| 
 Allocate the appropriate type of map manager that stores the key/value binding. Definition at line 389 of file Local_Name_Space_T.cpp. References ACE_SEH_EXCEPT, ACE_SEH_TRY, and ACE_Local_Name_Space<, ACE_LOCK >::create_manager_i(). Referenced by ACE_Local_Name_Space<, ACE_LOCK >::open(). 
 00390 {
00391   // Note that we *must* use structured exception handling here
00392   // because (1) we may need to commit virtual memory pages and (2)
00393   // C++ exception handling doesn't support resumption.
00394   int result = 0;
00395   ACE_SEH_TRY
00396     {
00397       result = this->create_manager_i ();
00398     }
00399   ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
00400     {
00401     }
00402   return result;
00403 }
 | 
  
      
  | 
  ||||||||||
| 
 
 Definition at line 407 of file Local_Name_Space_T.cpp. References ACE_OS::access(), ACE_DEBUG, ACE_DIRECTORY_SEPARATOR_STR, ACE_ERROR_RETURN, ACE_GUARD_RETURN, ACE_LOG_MSG, ACE_MEM_POOL_OPTIONS, ACE_NAME_SERVER_MAP, ACE_NEW_RETURN, ACE_TCHAR, ACE_TEXT, ACE_TRACE, ACE_Local_Name_Space<, ACE_LOCK >::ALLOCATOR, ACE_Allocator_Adapter< MALLOC >::bind(), ACE_Name_Options::database(), ACE::debug(), F_OK, ACE_Allocator_Adapter< MALLOC >::find(), LM_DEBUG, LM_ERROR, ACE_Allocator_Adapter< MALLOC >::malloc(), MAXNAMELEN, MAXPATHLEN, ACE_Local_Name_Space<, ACE_LOCK >::name_options_, ACE_Local_Name_Space<, ACE_LOCK >::name_space_map_, ACE_Name_Options::namespace_dir(), ACE_OS::strcat(), ACE_OS::strcpy(), ACE_OS::strlen(), ACE_OS::strncat(), and ACE_OS::strsncpy(). Referenced by ACE_Local_Name_Space<, ACE_LOCK >::create_manager(). 
 00408 {
00409   ACE_TRACE ("ACE_Local_Name_Space::create_manager_i");
00410   // Get directory name
00411   const ACE_TCHAR *dir = this->name_options_->namespace_dir ();
00412   const ACE_TCHAR *database = this->name_options_->database ();
00413 
00414   // Use process name as the file name.
00415   size_t len = ACE_OS::strlen (dir);
00416   len += ACE_OS::strlen (ACE_DIRECTORY_SEPARATOR_STR);
00417   len += ACE_OS::strlen (database) + 1;
00418 
00419   if (len >= MAXNAMELEN + MAXPATHLEN)
00420     {
00421       errno = ENAMETOOLONG;
00422       return -1;
00423     }
00424 
00425   ACE_OS::strcpy (this->context_file_, dir);
00426   ACE_OS::strcat (this->context_file_, ACE_DIRECTORY_SEPARATOR_STR);
00427   ACE_OS::strcat (this->context_file_, database);
00428 
00429   ACE_MEM_POOL_OPTIONS options (this->name_options_->base_address ());
00430 
00431   ACE_TCHAR lock_name_for_local_name_space [MAXNAMELEN + MAXPATHLEN];
00432   ACE_TCHAR lock_name_for_backing_store [MAXPATHLEN + MAXNAMELEN];
00433   const ACE_TCHAR *postfix = database;
00434 
00435   size_t length = 0;
00436   length = sizeof lock_name_for_local_name_space / sizeof (ACE_TCHAR);
00437   ACE_OS::strsncpy (lock_name_for_local_name_space,
00438                     dir,
00439                     length);
00440 
00441   ACE_OS::strncat (lock_name_for_local_name_space,
00442                    ACE_DIRECTORY_SEPARATOR_STR,
00443                    length -  ACE_OS::strlen (lock_name_for_local_name_space));
00444   ACE_OS::strncat (lock_name_for_local_name_space,
00445                    ACE_TEXT ("name_space_"),
00446                    length -  ACE_OS::strlen (lock_name_for_local_name_space));
00447   ACE_OS::strncat (lock_name_for_local_name_space,
00448                    postfix,
00449                    length -  ACE_OS::strlen (lock_name_for_local_name_space));
00450 
00451   length = sizeof lock_name_for_backing_store / sizeof (ACE_TCHAR);
00452   ACE_OS::strsncpy (lock_name_for_backing_store,
00453                     dir,
00454                     length);
00455   ACE_OS::strncat (lock_name_for_backing_store,
00456                    ACE_DIRECTORY_SEPARATOR_STR,
00457                    length -  ACE_OS::strlen (lock_name_for_backing_store));
00458   ACE_OS::strncat (lock_name_for_backing_store,
00459                    ACE_TEXT ("backing_store_"),
00460                    length -  ACE_OS::strlen (lock_name_for_backing_store));
00461   ACE_OS::strncat (lock_name_for_backing_store,
00462                    postfix,
00463                    length - ACE_OS::strlen (ACE_TEXT ("backing_store_")));
00464 
00465   // Create the allocator with the appropriate options.
00466   ACE_NEW_RETURN (this->allocator_,
00467                   ALLOCATOR (this->context_file_,
00468                              lock_name_for_backing_store,
00469                              &options), -1);
00470 
00471   if (ACE_LOG_MSG->op_status ())
00472     ACE_ERROR_RETURN ((LM_ERROR,
00473                        ACE_TEXT ("Allocator::Allocator\n")),
00474                       -1);
00475 
00476   ACE_NEW_RETURN (this->lock_,
00477                   ACE_LOCK (lock_name_for_local_name_space),
00478                   -1);
00479 
00480 #if !defined (ACE_LACKS_ACCESS)
00481   // Now check if the backing store has been created successfully
00482   if (ACE_OS::access (this->context_file_, F_OK) != 0)
00483     ACE_ERROR_RETURN ((LM_ERROR,
00484                        ACE_TEXT ("create_manager\n")),
00485                       -1);
00486 #endif /* ACE_LACKS_ACCESS */
00487 
00488   void *ns_map = 0;
00489 
00490   // This is the easy case since if we find the Name Server Map
00491   // Manager we know it's already initialized.
00492   if (this->allocator_->find (ACE_NAME_SERVER_MAP, ns_map) == 0)
00493     {
00494       this->name_space_map_ = (ACE_Name_Space_Map <ALLOCATOR> *) ns_map;
00495       if (ACE::debug ())
00496         ACE_DEBUG ((LM_DEBUG,
00497                     ACE_TEXT ("name_space_map_ = %@, ns_map = %@\n"),
00498                     this->name_space_map_, ns_map));
00499     }
00500 
00501   // This is the hard part since we have to avoid potential race
00502   // conditions...  We will use the double check here
00503   else
00504     {
00505       ACE_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
00506 
00507       // This is the easy case since if we find the Name Server Map
00508       // Manager we know it's already initialized.
00509       if (this->allocator_->find (ACE_NAME_SERVER_MAP, ns_map) == 0)
00510         {
00511           this->name_space_map_ = (ACE_Name_Space_Map <ALLOCATOR> *) ns_map;
00512           if (ACE::debug ())
00513             ACE_DEBUG ((LM_DEBUG,
00514                         ACE_TEXT ("name_space_map_ = %@, ns_map = %@\n"),
00515                         this->name_space_map_, ns_map));
00516         }
00517       else
00518         {
00519           size_t map_size = sizeof *this->name_space_map_;
00520           ns_map = this->allocator_->malloc (map_size);
00521 
00522           // Initialize the map into its memory location (e.g., shared memory).
00523           this->name_space_map_ =
00524             new (ns_map) ACE_Name_Space_Map <ALLOCATOR> (this->allocator_);
00525 
00526           if (this->allocator_->bind (ACE_NAME_SERVER_MAP, ns_map) == -1)
00527             ACE_ERROR_RETURN ((LM_ERROR,
00528                                ACE_TEXT ("create_manager\n")), -1);
00529         }
00530 
00531       if (ACE::debug ())
00532         ACE_DEBUG ((LM_DEBUG,
00533                     ACE_TEXT ("name_space_map_ = %@, ns_map = %@\n"),
00534                     this->name_space_map_, ns_map));
00535     }
00536 
00537   return 0;
00538 }
 | 
  
      
  | 
  ||||||||||
| 
 Dump the state of the object. 
 Implements ACE_Name_Space. Definition at line 942 of file Local_Name_Space_T.cpp. References ACE_SEH_EXCEPT, ACE_SEH_TRY, ACE_Local_Name_Space<, ACE_LOCK >::dump_i(), and ACE_Local_Name_Space<, ACE_LOCK >::remap(). 
 00943 {
00944 #if defined (ACE_HAS_DUMP)
00945   // Note that we *must* use structured exception handling here
00946   // because (1) we may need to commit virtual memory pages and (2)
00947   // C++ exception handling doesn't support resumption.
00948 
00949   // This should really be a const cast
00950   ACE_Local_Name_Space<ACE_MEM_POOL_2, ACE_LOCK> *fake_this =
00951     (ACE_Local_Name_Space<ACE_MEM_POOL_2, ACE_LOCK> *) this;
00952   ACE_UNUSED_ARG (fake_this);
00953 
00954   ACE_SEH_TRY
00955     {
00956       this->dump_i ();
00957     }
00958   ACE_SEH_EXCEPT (fake_this->remap (GetExceptionInformation ()))
00959     {
00960     }
00961 #endif /* ACE_HAS_DUMP */
00962 }
 | 
  
      
  | 
  ||||||||||
| 
 
 Definition at line 797 of file Local_Name_Space_T.cpp. References ACE_BEGIN_DUMP, ACE_DEBUG, ACE_END_DUMP, ACE_TEXT, ACE_TEXT_CHAR_TO_TCHAR, ACE_TRACE, and LM_DEBUG. Referenced by ACE_Local_Name_Space<, ACE_LOCK >::dump(). 
 00798 {
00799   ACE_TRACE ("ACE_Local_Name_Space::dump_i");
00800 
00801   ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
00802 
00803   MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
00804   MAP_MANAGER::ENTRY *map_entry;
00805 
00806   for (map_entry = 0;
00807        map_iterator.next (map_entry) != 0;
00808        map_iterator.advance())
00809     {
00810       char *key = map_entry->ext_id_.char_rep ();
00811       char *value = map_entry->int_id_.value ().char_rep ();
00812 #if !defined (ACE_NLOGGING)
00813       const char *type = map_entry->int_id_.type ();
00814 #endif /* ! ACE_NLOGGING */
00815 
00816       ACE_DEBUG ((LM_DEBUG,  ACE_TEXT ("key=%s\nvalue=%s\ntype=%s\n"),
00817                   ACE_TEXT_CHAR_TO_TCHAR (key), ACE_TEXT_CHAR_TO_TCHAR (value), ACE_TEXT_CHAR_TO_TCHAR (type)));
00818       // We need to delete key and value since char_rep allocates
00819       // memory for them
00820       delete [] key;
00821       delete [] value;
00822     }
00823 
00824   ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
00825 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 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. References ACE_BINDING_SET, ACE_SEH_EXCEPT, and ACE_SEH_TRY. 
 00888 {
00889   // Note that we *must* use structured exception handling here
00890   // because (1) we may need to commit virtual memory pages and (2)
00891   // C++ exception handling doesn't support resumption.
00892   int result = 0;
00893   ACE_SEH_TRY
00894     {
00895       result = this->list_name_entries_i (set, pattern);
00896     }
00897   ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
00898     {
00899     }
00900   return result;
00901 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 
 Definition at line 680 of file Local_Name_Space_T.cpp. References ACE_BINDING_SET, ACE_READ_GUARD_RETURN, and ACE_TRACE. 
 00683 {
00684   ACE_TRACE ("ACE_Local_Name_Space::list_name_entries_i");
00685   ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
00686 
00687   MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
00688   MAP_MANAGER::ENTRY *map_entry;
00689 
00690   for (map_entry = 0;
00691        map_iterator.next (map_entry) != 0;
00692        map_iterator.advance())
00693     {
00694       if (map_entry->ext_id_.strstr (pattern) != -1)
00695         {
00696           ACE_Name_Binding entry (map_entry->ext_id_,
00697                                   map_entry->int_id_.value (),
00698                                   map_entry->int_id_.type ());
00699 
00700           if (set.insert (entry) == -1)
00701             return -1;
00702         }
00703     }
00704 
00705   return 0;
00706 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 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. References ACE_SEH_EXCEPT, ACE_SEH_TRY, ACE_WSTRING_SET, and ACE_Local_Name_Space<, ACE_LOCK >::list_names_i(). 
 00831 {
00832   // Note that we *must* use structured exception handling here
00833   // because (1) we may need to commit virtual memory pages and (2)
00834   // C++ exception handling doesn't support resumption.
00835   int result = 0;
00836   ACE_SEH_TRY
00837     {
00838       result = this->list_names_i (set, pattern);
00839     }
00840   ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
00841     {
00842     }
00843   return result;
00844 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 
 Definition at line 541 of file Local_Name_Space_T.cpp. References ACE_READ_GUARD_RETURN, ACE_TRACE, ACE_WSTRING_SET, and ACE_Unbounded_Set< T >::insert(). Referenced by ACE_Local_Name_Space<, ACE_LOCK >::list_names(). 
 00544 {
00545   ACE_TRACE ("ACE_Local_Name_Space::list_names_i");
00546   ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
00547 
00548   MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
00549   MAP_MANAGER::ENTRY *map_entry;
00550 
00551   int result = 1;
00552 
00553   for (map_entry = 0;
00554        map_iterator.next (map_entry) != 0;
00555        map_iterator.advance())
00556     {
00557       if (map_entry->ext_id_.strstr (pattern) != -1)
00558         {
00559           ACE_NS_WString entry (map_entry->ext_id_ );
00560 
00561           if (set.insert (entry) == -1)
00562             {
00563               result = -1;
00564               break;
00565             }
00566           else
00567             result = 0;
00568         }
00569     }
00570 
00571   return result;
00572 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 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. References ACE_BINDING_SET, ACE_SEH_EXCEPT, ACE_SEH_TRY, and ACE_Local_Name_Space<, ACE_LOCK >::list_type_entries_i(). 
 00926 {
00927   // Note that we *must* use structured exception handling here
00928   // because (1) we may need to commit virtual memory pages and (2)
00929   // C++ exception handling doesn't support resumption.
00930   int result = 0;
00931   ACE_SEH_TRY
00932     {
00933       result = this->list_type_entries_i (set, pattern);
00934     }
00935   ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
00936     {
00937     }
00938   return result;
00939 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 
 Definition at line 737 of file Local_Name_Space_T.cpp. References ACE_BINDING_SET, ACE_READ_GUARD_RETURN, ACE_TRACE, ACE_NS_WString::char_rep(), ACE_OS::compile(), ACE_OS::free(), ACE_Unbounded_Set< T >::insert(), ACE_OS::step(), ACE_OS::strcmp(), ACE_OS::strdup(), and ACE_OS::strstr(). Referenced by ACE_Local_Name_Space<, ACE_LOCK >::list_type_entries(). 
 00740 {
00741   ACE_TRACE ("ACE_Local_Name_Space::list_type_entries_i");
00742   ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
00743 
00744   MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
00745   MAP_MANAGER::ENTRY *map_entry;
00746 
00747   char *compiled_regexp = 0;
00748   // Note that char_rep() allocates memory so we need to delete it
00749   char *pattern_rep = pattern.char_rep ();
00750 
00751   // Check for wildcard case first.
00752   if (ACE_OS::strcmp ("", pattern_rep) == 0)
00753     compiled_regexp = ACE_OS::strdup ("");
00754   else
00755     // Compile the regular expression (the 0's cause ACE_OS::compile
00756     // to allocate space).
00757 #if defined (ACE_HAS_REGEX)
00758     compiled_regexp = ACE_OS::compile (pattern_rep, 0, 0);
00759 #else /* If we don't have regular expressions just the pattern
00760          directly. */
00761   compiled_regexp = pattern_rep;
00762 #endif /* ACE_HAS_REGEX */
00763 
00764   for (map_entry = 0;
00765        map_iterator.next (map_entry) != 0;
00766        map_iterator.advance ())
00767     {
00768       // Get the type.
00769       const char *type = map_entry->int_id_.type ();
00770 
00771       if (ACE_OS::strcmp ("", pattern_rep) == 0 // Everything matches
00772                                                 // the wildcard.
00773 #if defined (ACE_HAS_REGEX)
00774           || ACE_OS::step (type, compiled_regexp) != 0)
00775 #else /* If we don't have regular expressions just use strstr() for
00776          substring matching. */
00777         || ACE_OS::strstr (type, compiled_regexp) != 0)
00778 #endif /* ACE_HAS_REGEX */
00779         {
00780           ACE_Name_Binding entry (map_entry->ext_id_,
00781                                   map_entry->int_id_.value (),
00782                                   map_entry->int_id_.type ());
00783 
00784           if (set.insert (entry) == -1)
00785             return -1;
00786         }
00787     }
00788 #if defined (ACE_HAS_REGEX)
00789   if (compiled_regexp)
00790     ACE_OS::free ((void *) compiled_regexp);
00791 #endif /* ACE_HAS_REGEX */
00792   delete [] pattern_rep;  // delete pattern_rep;
00793   return 0;
00794 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 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. References ACE_SEH_EXCEPT, ACE_SEH_TRY, ACE_WSTRING_SET, and ACE_Local_Name_Space<, ACE_LOCK >::list_types_i(). 
 00869 {
00870   // Note that we *must* use structured exception handling here
00871   // because (1) we may need to commit virtual memory pages and (2)
00872   // C++ exception handling doesn't support resumption.
00873   int result = 0;
00874   ACE_SEH_TRY
00875     {
00876       result = this->list_types_i (set, pattern);
00877     }
00878   ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
00879     {
00880     }
00881   return result;
00882 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 
 Definition at line 609 of file Local_Name_Space_T.cpp. References ACE_ALLOCATOR_RETURN, ACE_READ_GUARD_RETURN, ACE_TRACE, ACE_WSTRING_SET, ACE_NS_WString::char_rep(), ACE_OS::compile(), ACE_OS::free(), ACE_Unbounded_Set< T >::insert(), ACE_OS::step(), ACE_OS::strcmp(), and ACE_OS::strstr(). Referenced by ACE_Local_Name_Space<, ACE_LOCK >::list_types(). 
 00612 {
00613   ACE_TRACE ("ACE_Local_Name_Space::list_types_i");
00614   ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
00615 
00616   MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
00617   MAP_MANAGER::ENTRY *map_entry;
00618 
00619   char *compiled_regexp = 0;
00620 
00621   // Note that char_rep() allocates memory so we need to delete it
00622   char *pattern_rep = pattern.char_rep ();
00623 
00624   // Check for wildcard case first.
00625   if (ACE_OS::strcmp ("", pattern_rep) == 0)
00626     ACE_ALLOCATOR_RETURN (compiled_regexp,
00627                           ACE_OS::strdup (""),
00628                           -1);
00629   else
00630     // Compile the regular expression (the 0's cause ACE_OS::compile
00631     // to allocate space).
00632 #if defined (ACE_HAS_REGEX)
00633     compiled_regexp = ACE_OS::compile (pattern_rep, 0, 0);
00634 #else
00635   // If we don't have regular expressions just use the pattern
00636   // directly.
00637   compiled_regexp = pattern_rep;
00638 #endif /* ACE_HAS_REGEX */
00639 
00640   int result = 1;
00641 
00642   for (map_entry = 0;
00643        map_iterator.next (map_entry) != 0;
00644        map_iterator.advance ())
00645     {
00646       // Get the type
00647       const char *type = map_entry->int_id_.type ();
00648 
00649       // Everything matches the wildcard.
00650       if (ACE_OS::strcmp ("", pattern_rep) == 0
00651 #if defined (ACE_HAS_REGEX)
00652           || ACE_OS::step (type, compiled_regexp) != 0)
00653 #else
00654         // If we don't have regular expressions just use strstr() for
00655         // substring matching.
00656         || ACE_OS::strstr (type, compiled_regexp) != 0)
00657 #endif /* ACE_HAS_REGEX */
00658 
00659         {
00660           ACE_NS_WString entry (type);
00661 
00662           if (set.insert (entry) == -1)
00663             {
00664               result = -1;
00665               break;
00666             }
00667           else
00668             result = 0;
00669         }
00670     }
00671 #if defined (ACE_HAS_REGEX)
00672   if (compiled_regexp)
00673     ACE_OS::free ((void *) compiled_regexp);
00674 #endif /* ACE_HAS_REGEX */
00675   delete [] pattern_rep;  // delete pattern_rep;
00676   return result;
00677 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 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. References ACE_BINDING_SET, ACE_SEH_EXCEPT, ACE_SEH_TRY, and ACE_Local_Name_Space<, ACE_LOCK >::list_value_entries_i(). 
 00907 {
00908   // Note that we *must* use structured exception handling here
00909   // because (1) we may need to commit virtual memory pages and (2)
00910   // C++ exception handling doesn't support resumption.
00911   int result = 0;
00912   ACE_SEH_TRY
00913     {
00914       result = this->list_value_entries_i (set, pattern);
00915     }
00916   ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
00917     {
00918     }
00919   return result;
00920 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 
 Definition at line 709 of file Local_Name_Space_T.cpp. References ACE_BINDING_SET, ACE_READ_GUARD_RETURN, ACE_TRACE, and ACE_Unbounded_Set< T >::insert(). Referenced by ACE_Local_Name_Space<, ACE_LOCK >::list_value_entries(). 
 00712 {
00713   ACE_TRACE ("ACE_Local_Name_Space::list_value_entries_i");
00714   ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
00715 
00716   MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
00717   MAP_MANAGER::ENTRY *map_entry;
00718 
00719   for (map_entry = 0;
00720        map_iterator.next (map_entry) != 0;
00721        map_iterator.advance ())
00722     {
00723       if (map_entry->int_id_.value ().strstr (pattern) != -1)
00724         {
00725           ACE_Name_Binding entry (map_entry->ext_id_,
00726                                   map_entry->int_id_.value (),
00727                                   map_entry->int_id_.type ());
00728 
00729           if (set.insert (entry) == -1)
00730             return -1;
00731         }
00732     }
00733   return 0;
00734 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 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. References ACE_SEH_EXCEPT, ACE_SEH_TRY, ACE_WSTRING_SET, and ACE_Local_Name_Space<, ACE_LOCK >::list_values_i(). 
 00850 {
00851   // Note that we *must* use structured exception handling here
00852   // because (1) we may need to commit virtual memory pages and (2)
00853   // C++ exception handling doesn't support resumption.
00854   int result = 0;
00855   ACE_SEH_TRY
00856     {
00857       result = this->list_values_i (set, pattern);
00858     }
00859   ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
00860     {
00861     }
00862   return result;
00863 }
 | 
  
      
  | 
  ||||||||||||||||
| 
 
 Definition at line 575 of file Local_Name_Space_T.cpp. References ACE_READ_GUARD_RETURN, ACE_TRACE, ACE_WSTRING_SET, and ACE_Unbounded_Set< T >::insert(). Referenced by ACE_Local_Name_Space<, ACE_LOCK >::list_values(). 
 00578 {
00579   ACE_TRACE ("ACE_Local_Name_Space::list_values_i");
00580   ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
00581 
00582   MAP_MANAGER::ITERATOR map_iterator (*this->name_space_map_);
00583   MAP_MANAGER::ENTRY *map_entry;
00584 
00585   int result = 1;
00586 
00587   for (map_entry = 0;
00588        map_iterator.next (map_entry) != 0;
00589        map_iterator.advance ())
00590     {
00591       if (map_entry->int_id_.value ().strstr (pattern) != -1)
00592         {
00593           ACE_NS_WString entry (map_entry->int_id_.value ());
00594 
00595           if (set.insert (entry) == -1)
00596             {
00597               result = -1;
00598               break;
00599             }
00600           else
00601             result = 0;
00602         }
00603     }
00604 
00605   return result;
00606 }
 | 
  
      
  | 
  ||||||||||
| 
 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. References ACE_TRACE, ACE_Local_Name_Space<, ACE_LOCK >::create_manager(), and ACE_Local_Name_Space<, ACE_LOCK >::ns_scope_. Referenced by ACE_Local_Name_Space<, ACE_LOCK >::ACE_Local_Name_Space(). 
 00351 {
00352   ACE_TRACE ("ACE_Local_Name_Space::open");
00353   this->ns_scope_ = scope_in;
00354 
00355   return this->create_manager ();
00356 }
 | 
  
      
  | 
  ||||||||||||||||||||
| 
 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. References ACE_TRACE, ACE_WRITE_GUARD_RETURN, and ACE_Local_Name_Space<, ACE_LOCK >::shared_bind(). 
 00279 {
00280   ACE_TRACE ("ACE_Local_Name_Space::rebind");
00281   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
00282 
00283   return this->shared_bind (name, value, type, 1);
00284 }
 | 
  
      
  | 
  ||||||||||
| 
 Remap the backing store. 
 Definition at line 90 of file Local_Name_Space_T.cpp. References ACE_TRACE, and ACE_Allocator_Adapter< MALLOC >::alloc(). Referenced by ACE_Local_Name_Space<, ACE_LOCK >::dump(). 
 00091 {
00092   ACE_TRACE ("ACE_Local_Name_Space::remap");
00093 
00094   void *addr = (void *) ep->ExceptionRecord->ExceptionInformation[1];
00095 
00096   // The following requires Memory Pool to have ::remap()
00097   // defined. Thus currently this will only work for
00098   // ACE_MMap_Memory_Pool.
00099   if (this->allocator_->alloc ().memory_pool ().remap (addr) == -1)
00100     // Kick it upstairs...
00101     return EXCEPTION_CONTINUE_SEARCH;
00102 
00103 #if __X86__
00104   // This is 80x86-specific.
00105   ep->ContextRecord->Edi = (DWORD) addr;
00106 #elif __MIPS__
00107   ep->ContextRecord->IntA0 =
00108     ep->ContextRecord->IntV0 = (DWORD) addr;
00109   ep->ContextRecord->IntT5 = ep->ContextRecord->IntA0 + 3;
00110 #endif /* __X86__ */
00111     // Resume execution at the original point of "failure."
00112   return EXCEPTION_CONTINUE_EXECUTION;
00113 }
 | 
  
      
  | 
  ||||||||||||||||||||
| 
 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. References ACE_SEH_EXCEPT, ACE_SEH_TRY, and ACE_Local_Name_Space<, ACE_LOCK >::resolve_i(). 
 00291 {
00292   // Note that we *must* use structured exception handling here
00293   // because (1) we may need to commit virtual memory pages and (2)
00294   // C++ exception handling doesn't support resumption.
00295   int result = 0;
00296   ACE_SEH_TRY
00297     {
00298       result = this->resolve_i (name, value, type);
00299     }
00300   ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
00301     {
00302     }
00303   return result;
00304 }
 | 
  
      
  | 
  ||||||||||||||||||||
| 
 
 Definition at line 308 of file Local_Name_Space_T.cpp. References ACE_NEW_RETURN, ACE_READ_GUARD_RETURN, ACE_TRACE, ACE_Local_Name_Space<, ACE_LOCK >::name_space_map_, ACE_OS::strlen(), ACE_OS::strsncpy(), ACE_NS_Internal::type(), and ACE_NS_Internal::value(). Referenced by ACE_Local_Name_Space<, ACE_LOCK >::resolve(). 
 00312 {
00313   ACE_TRACE ("ACE_Local_Name_Space::resolve_i");
00314   ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
00315 
00316   ACE_NS_String ns_name (name);
00317   ACE_NS_Internal ns_internal;
00318   ACE_NS_String nbc_string; // Note the classy variable name! :)
00319 
00320   if (this->name_space_map_->find (ns_name,
00321                                    ns_internal,
00322                                    this->allocator_) != 0)
00323     return -1;
00324 
00325   // Calls conversion operator and then calls the ACE_NS_WString
00326   // assignment operator to get a fresh copy.  (*#*(@#&!*@!!*@&( HP
00327   // compiler causes us to add an extra copy explicitly !! :)
00328   nbc_string = ns_internal.value ();
00329   value = nbc_string;
00330 
00331   // Gets type and then the actual reprsentation which is a
00332   // ACE_WCHAR_T
00333   const char *temp = ns_internal.type ();
00334 
00335   size_t len = ACE_OS::strlen (ns_internal.type ());
00336   // Makes a copy here. Caller needs to call delete to free up
00337   // memory.
00338   char *new_type = 0;
00339   ACE_NEW_RETURN (new_type,
00340                   char [len + 1],
00341                   -1);
00342 
00343   ACE_OS::strsncpy (new_type, temp, len + 1);
00344   type = new_type;
00345   return 0;
00346 }
 | 
  
      
  | 
  ||||||||||||||||||||||||
| 
 Factor out code from bind() and rebind(). 
 Definition at line 117 of file Local_Name_Space_T.cpp. References ACE_SEH_EXCEPT, ACE_SEH_TRY, and ACE_Local_Name_Space<, ACE_LOCK >::shared_bind_i(). Referenced by ACE_Local_Name_Space<, ACE_LOCK >::bind(), and ACE_Local_Name_Space<, ACE_LOCK >::rebind(). 
 00122 {
00123   // Note that we *must* use structured exception handling here
00124   // because (1) we may need to commit virtual memory pages and (2)
00125   // C++ exception handling doesn't support resumption.
00126   int result = 0;
00127   ACE_SEH_TRY
00128     {
00129       result = this->shared_bind_i (name, value, type, rebind);
00130     }
00131   ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
00132     {
00133     }
00134   return result;
00135 }
 | 
  
      
  | 
  ||||||||||||||||||||||||
| 
 
 Definition at line 138 of file Local_Name_Space_T.cpp. References ACE_TRACE, ACE_WCHAR_T, ACE_Allocator_Adapter< MALLOC >::free(), ACE_Auto_Basic_Array_Ptr< X >::get(), ACE_String_Base< CHAR >::length(), ACE_Allocator_Adapter< MALLOC >::malloc(), ACE_Local_Name_Space<, ACE_LOCK >::name_space_map_, ACE_String_Base< CHAR >::rep(), ACE_OS::strcpy(), ACE_OS::strlen(), ACE_Allocator_Adapter< MALLOC >::sync(), and ACE_NS_Internal::value(). Referenced by ACE_Local_Name_Space<, ACE_LOCK >::shared_bind(). 
 00143 {
00144 
00145   ACE_TRACE ("ACE_Local_Name_Space::shared_bind_i");
00146   const size_t name_len = (name.length () + 1) * sizeof (ACE_WCHAR_T);
00147   const size_t value_len = (value.length () + 1) * sizeof (ACE_WCHAR_T);
00148   const size_t type_len = ACE_OS::strlen (type) + 1;
00149   const size_t total_len = name_len + value_len + type_len;
00150   char *ptr = (char *) this->allocator_->malloc (total_len);
00151 
00152   if (ptr == 0)
00153     return -1;
00154   else
00155     {
00156       // Note that the value_rep *must* come first to make sure we can
00157       // retrieve this pointer later on in unbind().
00158       ACE_WCHAR_T *value_rep = (ACE_WCHAR_T *) (ptr);
00159       ACE_WCHAR_T *name_rep = (ACE_WCHAR_T *) (ptr + value_len);
00160       char *new_type = (char *) (ptr + value_len + name_len);
00161 
00162       ACE_Auto_Basic_Array_Ptr<ACE_WCHAR_T> name_urep (name.rep ());
00163       ACE_Auto_Basic_Array_Ptr<ACE_WCHAR_T> value_urep (value.rep ());
00164       ACE_NS_String new_name (name_rep, name_urep.get (), name_len);
00165       ACE_NS_String new_value (value_rep, value_urep.get (), value_len);
00166 
00167       ACE_OS::strcpy (new_type, type);
00168       ACE_NS_Internal new_internal (new_value, new_type);
00169       int result = -1;
00170 
00171       if (rebind == 0)
00172         {
00173           // Do a normal bind.  This will fail if there's already an
00174           // <new_internal> with the same name.
00175           result = this->name_space_map_->bind (new_name,
00176                                                 new_internal,
00177                                                 this->allocator_);
00178 
00179           if (result == 1)
00180             {
00181               // Entry already existed so bind failed. Free our
00182               // dynamically allocated memory.
00183               this->allocator_->free ((void *) ptr);
00184               return result;
00185             }
00186         }
00187       else
00188         {
00189           // Do a rebind.  If there's already any entry, this will
00190           // return the existing <new_name> and <new_internal> and
00191           // overwrite the existing name binding.
00192           ACE_NS_String old_name;
00193           ACE_NS_Internal old_internal;
00194 
00195           result = this->name_space_map_->rebind (new_name, new_internal,
00196                                                   old_name, old_internal,
00197                                                   this->allocator_);
00198           if (result == 1)
00199             {
00200               // Free up the memory we allocated in shared_bind().
00201               // Note that this assumes that the "value" pointer comes
00202               // first and that the value, name, and type are
00203               // contiguously allocated (see above for details)
00204               this->allocator_->free ((void *) (old_internal.value ()).fast_rep ());
00205             }
00206         }
00207 
00208       if (result == -1)
00209         // Free our dynamically allocated memory.
00210         this->allocator_->free ((void *) ptr);
00211       else
00212         // If bind() or rebind() succeed, they will automatically sync
00213         // up the map manager entry.  However, we must sync up our
00214         // name/value memory.
00215         this->allocator_->sync (ptr, total_len);
00216 
00217       return result;
00218     }
00219 }
 | 
  
      
  | 
  ||||||||||
| 
 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. References ACE_SEH_EXCEPT, ACE_SEH_TRY, and ACE_Local_Name_Space<, ACE_LOCK >::unbind_i(). 
 00224 {
00225   // Note that we *must* use structured exception handling here
00226   // because (1) we may need to commit virtual memory pages and (2)
00227   // C++ exception handling doesn't support resumption.
00228   int result = 0;
00229   ACE_SEH_TRY
00230     {
00231       result = this->unbind_i (name);
00232     }
00233   ACE_SEH_EXCEPT (this->remap (GetExceptionInformation ()))
00234     {
00235     }
00236   return result;
00237 
00238 }
 | 
  
      
  | 
  ||||||||||
| 
 
 Definition at line 241 of file Local_Name_Space_T.cpp. References ACE_TRACE, ACE_WRITE_GUARD_RETURN, ACE_Allocator_Adapter< MALLOC >::free(), ACE_Local_Name_Space<, ACE_LOCK >::name_space_map_, and ACE_NS_Internal::value(). Referenced by ACE_Local_Name_Space<, ACE_LOCK >::unbind(). 
 00243 {
00244   ACE_TRACE ("ACE_Local_Name_Space::unbind_i");
00245 
00246   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, *this->lock_, -1);
00247   ACE_NS_String ns_name (name);
00248   ACE_NS_Internal ns_internal;
00249   if (this->name_space_map_->unbind (ns_name,
00250                                      ns_internal,
00251                                      this->allocator_) != 0)
00252     return -1;
00253 
00254   // Free up the memory we allocated in shared_bind().  Note that this
00255   // assumes that the "value" pointer comes first and that the value,
00256   // name and type are contiguously allocated (see shared_bind() for
00257   // details)
00258   this->allocator_->free ((void *) (ns_internal.value ()).fast_rep ());
00259   return 0;
00260 }
 | 
  
      
  | 
  |||||
| 
 Pointer to the allocator. 
 Definition at line 250 of file Local_Name_Space_T.h.  | 
  
      
  | 
  |||||
| 
 Name of the file used as the backing store. 
 Definition at line 263 of file Local_Name_Space_T.h.  | 
  
      
  | 
  |||||
| 
 Synchronization variable. 
 Definition at line 266 of file Local_Name_Space_T.h.  | 
  
      
  | 
  |||||
| 
 Keep track of the options such as database name etc. 
 Definition at line 260 of file Local_Name_Space_T.h. Referenced by ACE_Local_Name_Space<, ACE_LOCK >::create_manager_i().  | 
  
      
  | 
  |||||
| 
 Pointer to the allocated map manager. 
 Definition at line 253 of file Local_Name_Space_T.h. Referenced by ACE_Local_Name_Space<, ACE_LOCK >::create_manager_i(), ACE_Local_Name_Space<, ACE_LOCK >::resolve_i(), ACE_Local_Name_Space<, ACE_LOCK >::shared_bind_i(), and ACE_Local_Name_Space<, ACE_LOCK >::unbind_i().  | 
  
      
  | 
  |||||
| 
 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. Referenced by ACE_Local_Name_Space<, ACE_LOCK >::open().  | 
  
 
1.3.6