diff options
author | irfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-10-16 20:04:33 +0000 |
---|---|---|
committer | irfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-10-16 20:04:33 +0000 |
commit | ae2eea130465a785fe48838626fe7aacffbdb26f (patch) | |
tree | 52ee246650c52a625dd5743466eb1f1c9479a563 | |
parent | 640d0815ab25a360136cb82d701105167fca9148 (diff) | |
download | ATCD-ae2eea130465a785fe48838626fe7aacffbdb26f.tar.gz |
*** empty log message ***
-rw-r--r-- | ChangeLog-98b | 7 | ||||
-rw-r--r-- | ace/Hash_Map_Manager.cpp | 31 | ||||
-rw-r--r-- | ace/Hash_Map_Manager.h | 16 | ||||
-rw-r--r-- | ace/Map_Manager.cpp | 39 | ||||
-rw-r--r-- | ace/Map_Manager.h | 18 |
5 files changed, 61 insertions, 50 deletions
diff --git a/ChangeLog-98b b/ChangeLog-98b index dbe1283ccab..6b9f24d5ae5 100644 --- a/ChangeLog-98b +++ b/ChangeLog-98b @@ -1,3 +1,10 @@ +Fri Oct 16 14:57:58 1998 Irfan Pyarali <irfan@cs.wustl.edu> + + * ace/Hash_Map_Manager and Map_Manager: Fixed the operator++ and + operator--. Also, moved the guard from the individual methods + to the iterator. Now, the read guard is held for the life time + of the iterator. + Fri Oct 16 14:51:57 1998 Nanbor Wang <nanbor@cs.wustl.edu> * ace/OS.cpp (thr_create): Made sure if users don't specify diff --git a/ace/Hash_Map_Manager.cpp b/ace/Hash_Map_Manager.cpp index 86f62013be2..492d6f8097d 100644 --- a/ace/Hash_Map_Manager.cpp +++ b/ace/Hash_Map_Manager.cpp @@ -597,9 +597,14 @@ ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::ACE_Hash_Map_Iterator_Base int head) : map_man_ (&mm), index_ (head != 0 ? -1 : ACE_static_cast (ssize_t, mm.total_size_)), - next_ (0) + next_ (0), + guard_ (this->map_man_->lock_) { ACE_TRACE ("ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::ACE_Hash_Map_Iterator_Base"); + + if (this->guard_.locked () == 0) + return; + if (mm.table_ != 0) this->next_ = &mm.table_[head != 0 ? 0 : mm.total_size_ - 1]; } @@ -608,7 +613,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::next (ACE_Hash_Map_Entry<EXT_ID, INT_ID> *&entry) { ACE_TRACE ("ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::next"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1); if (this->map_man_->table_ != 0 && this->index_ < ACE_static_cast (ssize_t, this->map_man_->total_size_) @@ -626,7 +630,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::done (void) const { ACE_TRACE ("ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::done"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1); return this->map_man_->table_ == 0 || this->index_ >= ACE_static_cast (ssize_t, this->map_man_->total_size_) @@ -637,7 +640,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::forward_i (void) { ACE_TRACE ("ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::forward_i"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1); if (this->map_man_->table_ == 0) return -1; @@ -669,7 +671,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::reverse_i (void) { ACE_TRACE ("ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::reverse_i"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1); if (this->map_man_->table_ == 0) return -1; @@ -769,7 +770,6 @@ ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> & ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void) { ACE_TRACE ("ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void)"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this); this->forward_i (); return *this; @@ -780,7 +780,6 @@ ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int) { ACE_TRACE ("ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this); ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); this->forward_i (); @@ -792,7 +791,6 @@ ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> & ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void) { ACE_TRACE ("ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this); this->reverse_i (); return *this; @@ -803,7 +801,6 @@ ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int) { ACE_TRACE ("ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this); ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); this->reverse_i (); @@ -841,11 +838,9 @@ ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> & ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void) { ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void)"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this); - ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); this->reverse_i (); - return retv; + return *this; } template <class EXT_ID, class INT_ID, class ACE_LOCK> @@ -853,10 +848,10 @@ ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int) { ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this); + ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); this->reverse_i (); - return *this; + return retv; } template <class EXT_ID, class INT_ID, class ACE_LOCK> @@ -864,11 +859,9 @@ ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> & ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void) { ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this); - ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); this->forward_i (); - return retv; + return *this; } template <class EXT_ID, class INT_ID, class ACE_LOCK> @@ -876,10 +869,10 @@ ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int) { ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this); + ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); this->forward_i (); - return *this; + return retv; } #endif /* ACE_HASH_MAP_MANAGER_C */ diff --git a/ace/Hash_Map_Manager.h b/ace/Hash_Map_Manager.h index 1abc494c42d..c7559e9f3ef 100644 --- a/ace/Hash_Map_Manager.h +++ b/ace/Hash_Map_Manager.h @@ -18,6 +18,7 @@ #define ACE_HASH_MAP_MANAGER_H #include "ace/OS.h" +#include "ace/Synch.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) #pragma once @@ -394,6 +395,9 @@ protected: ACE_Hash_Map_Entry<EXT_ID, INT_ID> *next_; // Keeps track of how far we've advanced in a linked list in each // table slot. + + ACE_Read_Guard<ACE_LOCK> guard_; + // Read guard for the life time of the iterator. }; template <class EXT_ID, class INT_ID, class ACE_LOCK> @@ -427,10 +431,10 @@ public: // Postfix advance. ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void); - // Prefix advance. + // Prefix reverse. ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int); - // Postfix advance. + // Postfix reverse. ACE_ALLOC_HOOK_DECLARE; // Declare the dynamic allocation hooks. @@ -461,16 +465,16 @@ public: // = STL styled iteration, compare, and reference functions. ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator++ (void); - // Postfix advance. + // Prefix reverse. ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator++ (int); - // Prefix advance. + // Postfix reverse. ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void); - // Postfix advance. + // Prefix advance. ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int); - // Prefix advance. + // Postfix advance. ACE_ALLOC_HOOK_DECLARE; // Declare the dynamic allocation hooks. diff --git a/ace/Map_Manager.cpp b/ace/Map_Manager.cpp index fb2690bdf7e..8e351ef6529 100644 --- a/ace/Map_Manager.cpp +++ b/ace/Map_Manager.cpp @@ -4,7 +4,6 @@ #define ACE_MAP_MANAGER_C #define ACE_BUILD_DLL -#include "ace/Synch.h" #include "ace/Malloc.h" #include "ace/Service_Config.h" #include "ace/Map_Manager.h" @@ -611,9 +610,14 @@ ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::dump_i (void) const template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Iterator_Base (ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &mm, int head) : map_man_ (&mm), - next_ (-1) + next_ (-1), + guard_ (this->map_man_->lock_) { ACE_TRACE ("ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Iterator_Base"); + + if (this->guard_.locked () == 0) + return; + if (head == 0) this->next_ = this->map_man_->cur_size_; } @@ -622,7 +626,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::next (ACE_Map_Entry<EXT_ID, INT_ID> *&mm) { ACE_TRACE ("ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::next"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1); if (this->map_man_->search_structure_ != 0 // Note that this->next_ is never negative at this point... @@ -640,7 +643,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::done (void) const { ACE_TRACE ("ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::done"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1); return this->map_man_->search_structure_ == 0 // Note that this->next_ is never negative at this point... @@ -653,7 +655,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::forward_i (void) { ACE_TRACE ("ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::forward_i"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1); for (++this->next_; ACE_static_cast(size_t, this->next_) < this->map_man_->cur_size_ @@ -667,7 +668,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::reverse_i (void) { ACE_TRACE ("ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::reverse_i"); - ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1); for (--this->next_; this->next_ >= 0 @@ -754,7 +754,8 @@ ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int) { ACE_TRACE ("ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)"); - this->reverse_i (); + ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); + this->forward_i (); return retv; } @@ -763,11 +764,9 @@ ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> & ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void) { ACE_TRACE ("ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)"); - ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); - ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); - this->forward_i (); - return retv; + this->reverse_i (); + return *this; } template <class EXT_ID, class INT_ID, class ACE_LOCK> @@ -775,8 +774,10 @@ ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int) { ACE_TRACE ("ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)"); + + ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); this->reverse_i (); - return *this; + return retv; } ACE_ALLOC_HOOK_DEFINE(ACE_Map_Reverse_Iterator) @@ -810,10 +811,9 @@ ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> & ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void) { ACE_TRACE ("ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void)"); - ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); this->reverse_i (); - return retv; + return *this; } template <class EXT_ID, class INT_ID, class ACE_LOCK> @@ -821,8 +821,10 @@ ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int) { ACE_TRACE ("ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)"); + + ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); this->reverse_i (); - return *this; + return retv; } template <class EXT_ID, class INT_ID, class ACE_LOCK> @@ -830,10 +832,9 @@ ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> & ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void) { ACE_TRACE ("ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)"); - ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); this->forward_i (); - return retv; + return *this; } template <class EXT_ID, class INT_ID, class ACE_LOCK> @@ -841,8 +842,10 @@ ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int) { ACE_TRACE ("ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)"); + + ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this); this->forward_i (); - return *this; + return retv; } #endif /* ACE_MAP_MANAGER_C */ diff --git a/ace/Map_Manager.h b/ace/Map_Manager.h index f9941dbcd4d..0e3c0b4fbb6 100644 --- a/ace/Map_Manager.h +++ b/ace/Map_Manager.h @@ -17,7 +17,8 @@ #if !defined (ACE_MAP_MANAGER_H) #define ACE_MAP_MANAGER_H -#include "ace/ACE.h" +#include "ace/OS.h" +#include "ace/Synch.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) #pragma once @@ -336,6 +337,9 @@ protected: ssize_t next_; // Keeps track of how far we've advanced... + + ACE_Read_Guard<ACE_LOCK> guard_; + // Read guard for the life time of the iterator. }; template <class EXT_ID, class INT_ID, class ACE_LOCK> @@ -367,10 +371,10 @@ public: // Postfix advance. ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void); - // Prefix advance. + // Prefix reverse. ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int); - // Postfix advance. + // Postfix reverse. ACE_ALLOC_HOOK_DECLARE; // Declare the dynamic allocation hooks. @@ -399,16 +403,16 @@ public: // = STL styled iteration, compare, and reference functions. ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator++ (void); - // Postfix advance. + // Prefix reverse. ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator++ (int); - // Prefix advance. + // Postfix reverse. ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void); - // Postfix advance. + // Prefix advance. ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int); - // Prefix advance. + // Postfix advance. ACE_ALLOC_HOOK_DECLARE; // Declare the dynamic allocation hooks. |