#include <Based_Pointer_Repository.h>
Collaboration diagram for ACE_Based_Pointer_Repository:
Public Member Functions | |
ACE_Based_Pointer_Repository (void) | |
~ACE_Based_Pointer_Repository (void) | |
int | find (void *addr, void *&base_addr) |
int | bind (void *addr, size_t size) |
int | unbind (void *addr) |
Private Attributes | |
ACE_Based_Pointer_Repository_Rep * | rep_ |
Definition at line 41 of file Based_Pointer_Repository.h.
|
Definition at line 37 of file Based_Pointer_Repository.cpp. References ACE_NEW, and ACE_TRACE.
00038 { 00039 ACE_TRACE ("ACE_Based_Pointer_Repository::ACE_Based_Pointer_Repository"); 00040 ACE_NEW (this->rep_, 00041 ACE_Based_Pointer_Repository_Rep); 00042 } |
|
Definition at line 44 of file Based_Pointer_Repository.cpp. References ACE_TRACE, and rep_.
|
|
Bind a new entry to the repository or update the size of an existing entry. Returns 0 on success and -1 on failure. Definition at line 81 of file Based_Pointer_Repository.cpp. References ACE_GUARD_RETURN, ACE_SYNCH_MUTEX, ACE_TRACE, ACE_Based_Pointer_Repository_Rep::addr_map_, and rep_.
00083 { 00084 ACE_TRACE ("ACE_Based_Pointer_Repository::bind"); 00085 ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, mon, this->rep_->lock_, -1); 00086 00087 return this->rep_->addr_map_.rebind (addr, size); 00088 } |
|
Return the appropriate base_addr region that contains addr. Returns 1 on success and 0 if the addr isn't contained in any base_addr region. Definition at line 53 of file Based_Pointer_Repository.cpp. References ACE_GUARD_RETURN, ACE_SYNCH_MUTEX, ACE_TRACE, ACE_Map_Iterator< EXT_ID, INT_ID, ACE_LOCK >::advance(), ACE_Map_Entry< void *, size_t >::ext_id_, ACE_Map_Entry< void *, size_t >::int_id_, ACE_Based_Pointer_Repository_Rep::MAP_ENTRY, ACE_Based_Pointer_Repository_Rep::MAP_ITERATOR, and ACE_Map_Iterator_Base< EXT_ID, INT_ID, ACE_LOCK >::next().
00055 { 00056 ACE_TRACE ("ACE_Based_Pointer_Repository::find"); 00057 ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, mon, this->rep_->lock_, -1); 00058 ACE_Based_Pointer_Repository_Rep::MAP_ENTRY *ce = 0; 00059 00060 for (ACE_Based_Pointer_Repository_Rep::MAP_ITERATOR iter (this->rep_->addr_map_); 00061 iter.next (ce) != 0; 00062 iter.advance ()) 00063 // Check to see if <addr> is within any of the regions. 00064 if (addr >= ce->ext_id_ 00065 && addr < ((char *) ce->ext_id_ + ce->int_id_)) 00066 { 00067 // Assign the base address. 00068 base_addr = ce->ext_id_; 00069 return 1; 00070 } 00071 00072 // Assume base address 0 (e.g., if new'ed). 00073 base_addr = 0; 00074 return 0; 00075 } |
|
Unbind from the repository the that is contained within. Definition at line 93 of file Based_Pointer_Repository.cpp. References ACE_GUARD_RETURN, ACE_SYNCH_MUTEX, ACE_TRACE, ACE_Based_Pointer_Repository_Rep::addr_map_, ACE_Map_Iterator< EXT_ID, INT_ID, ACE_LOCK >::advance(), ACE_Map_Entry< void *, size_t >::ext_id_, ACE_Map_Entry< void *, size_t >::int_id_, ACE_Based_Pointer_Repository_Rep::MAP_ENTRY, ACE_Based_Pointer_Repository_Rep::MAP_ITERATOR, ACE_Map_Iterator_Base< EXT_ID, INT_ID, ACE_LOCK >::next(), and rep_.
00094 { 00095 ACE_TRACE ("ACE_Based_Pointer_Repository::unbind"); 00096 ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, mon, this->rep_->lock_, -1); 00097 ACE_Based_Pointer_Repository_Rep::MAP_ENTRY *ce = 0; 00098 00099 // Search for service handlers that requested notification. 00100 00101 for (ACE_Based_Pointer_Repository_Rep::MAP_ITERATOR iter (this->rep_->addr_map_); 00102 iter.next (ce) != 0; 00103 iter.advance ()) 00104 { 00105 // Check to see if <addr> is within any of the regions and if 00106 // so, unbind the key from the map. 00107 if (addr >= ce->ext_id_ 00108 && addr < ((char *) ce->ext_id_ + ce->int_id_)) 00109 // Unbind base address. 00110 return this->rep_->addr_map_.unbind (ce->ext_id_); 00111 } 00112 00113 return 0; 00114 } |
|
Use the "Cheshire-Cat" technique to hide the implementation in order to avoid circular #include dependencies. Definition at line 72 of file Based_Pointer_Repository.h. Referenced by bind(), unbind(), and ~ACE_Based_Pointer_Repository(). |