Changes to attempt to silence bcc64x
[ACE_TAO.git] / ACE / ace / Map_Manager.inl
blob898dbe9f91f95b732a6f2046a5724b4b052268c1
1 // -*- C++ -*-
2 #include "ace/Guard_T.h"
3 #include "ace/Log_Category.h"
5 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
7 template <class EXT_ID, class INT_ID> ACE_INLINE ACE_UINT32
8 ACE_Map_Entry<EXT_ID, INT_ID>::next () const
10   return this->next_;
13 template <class EXT_ID, class INT_ID> ACE_INLINE void
14 ACE_Map_Entry<EXT_ID, INT_ID>::next (ACE_UINT32 n)
16   this->next_ = n;
19 template <class EXT_ID, class INT_ID> ACE_INLINE ACE_UINT32
20 ACE_Map_Entry<EXT_ID, INT_ID>::prev () const
22   return this->prev_;
25 template <class EXT_ID, class INT_ID> ACE_INLINE void
26 ACE_Map_Entry<EXT_ID, INT_ID>::prev (ACE_UINT32 p)
28   this->prev_ = p;
31 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
32 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Manager (size_t size,
33                                                             ACE_Allocator *alloc)
34   : allocator_ (0),
35     search_structure_ (0),
36     total_size_ (0),
37     cur_size_ (0)
39   if (this->open (size, alloc) == -1)
40     ACELIB_ERROR ((LM_ERROR, ACE_TEXT ("ACE_Map_Manager\n")));
43 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
44 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Manager (ACE_Allocator *alloc)
45   : allocator_ (0),
46     search_structure_ (0),
47     total_size_ (0),
48     cur_size_ (0)
50   if (this->open (ACE_DEFAULT_MAP_SIZE, alloc) == -1)
51     ACELIB_ERROR ((LM_ERROR, ACE_TEXT ("ACE_Map_Manager\n")));
54 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
55 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::close ()
57   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
59   return this->close_i ();
62 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
63 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::~ACE_Map_Manager ()
65   this->close ();
68 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
69 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::bind (const EXT_ID &ext_id,
70                                                  const INT_ID &int_id)
72   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
74   return this->bind_i (ext_id,
75                        int_id);
78 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
79 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::rebind (const EXT_ID &ext_id,
80                                                    const INT_ID &int_id,
81                                                    EXT_ID &old_ext_id,
82                                                    INT_ID &old_int_id)
84   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
86   return this->rebind_i (ext_id,
87                          int_id,
88                          old_ext_id,
89                          old_int_id);
92 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
93 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::rebind (const EXT_ID &ext_id,
94                                                    const INT_ID &int_id,
95                                                    INT_ID &old_int_id)
97   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
99   return this->rebind_i (ext_id,
100                          int_id,
101                          old_int_id);
104 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
105 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::rebind (const EXT_ID &ext_id,
106                                                    const INT_ID &int_id)
108   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
110   return this->rebind_i (ext_id,
111                          int_id);
114 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
115 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::trybind (const EXT_ID &ext_id,
116                                                     INT_ID &int_id)
118   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
120   return this->trybind_i (ext_id,
121                           int_id);
124 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
125 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::find (const EXT_ID &ext_id) const
127   ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> *nc_this =
128     (ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> *) this;
129   ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, nc_this->lock_, -1);
131   ACE_UINT32 slot = 0;
132   return nc_this->find_and_return_index (ext_id, slot);
135 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
136 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::find (const EXT_ID &ext_id,
137                                                  INT_ID &int_id) const
139   ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> *nc_this =
140     (ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> *) this;
141   ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, nc_this->lock_, -1);
143   return nc_this->find_i (ext_id, int_id);
146 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
147 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::unbind_i (const EXT_ID &ext_id)
149   // Unbind the entry.
150   ACE_UINT32 slot = 0;
151   return this->unbind_and_return_index (ext_id,
152                                         slot);
155 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
156 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::unbind (const EXT_ID &ext_id,
157                                                    INT_ID &int_id)
159   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
161   return this->unbind_i (ext_id,
162                          int_id);
165 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
166 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::unbind (const EXT_ID &ext_id)
168   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
169   return this->unbind_i (ext_id);
172 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE size_t
173 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::current_size () const
175   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, static_cast<size_t> (-1));
176   return this->cur_size_;
179 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE size_t
180 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::total_size () const
182   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, static_cast<size_t> (-1));
183   return this->total_size_;
186 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE ACE_LOCK &
187 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::mutex ()
189   return this->lock_;
192 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE void
193 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::move_from_free_list_to_occupied_list (ACE_UINT32 slot)
195   this->shared_move (slot,
196                      this->free_list_,
197                      this->free_list_id (),
198                      this->occupied_list_,
199                      this->occupied_list_id ());
202 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE void
203 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::move_from_occupied_list_to_free_list (ACE_UINT32 slot)
205   this->shared_move (slot,
206                      this->occupied_list_,
207                      this->occupied_list_id (),
208                      this->free_list_,
209                      this->free_list_id ());
212 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
213 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::equal (const EXT_ID &id1,
214                                                   const EXT_ID &id2)
216   return id1 == id2;
219 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE ACE_UINT32
220 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::free_list_id () const
222   // If you change ~0, please change
223   // ACE_Active_Map_Manager_Key::ACE_Active_Map_Manager_Key()
224   // accordingly.
225   return (ACE_UINT32) ~0;
228 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE ACE_UINT32
229 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::occupied_list_id () const
231   return (ACE_UINT32) ~1;
234 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
235 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>
236 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::begin ()
238   return ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> (*this);
241 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
242 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>
243 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::end ()
245   return ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> (*this, 1);
248 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
249 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>
250 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::rbegin ()
252   return ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> (*this);
255 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
256 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>
257 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::rend ()
259   return ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> (*this, 1);
262 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
263 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Iterator_Base (ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &mm)
264   : map_man_ (&mm),
265     next_ (map_man_->occupied_list_id ())
269 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
270 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::next (ACE_Map_Entry<EXT_ID, INT_ID> *&mm) const
272   if (this->next_ != this->map_man_->occupied_list_id ())
273     {
274       mm = &this->map_man_->search_structure_[this->next_];
275       return 1;
276     }
277   else
278     return 0;
281 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
282 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::done () const
284   return this->next_ == this->map_man_->occupied_list_id ();
287 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
288 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::forward_i ()
291 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
293   while (1)
294     {
295       // Go to the next item in the list.
296       this->next_ = this->map_man_->search_structure_[this->next_].next ();
298       // Stop if we reach the end.
299       if (this->done ())
300         break;
302       // Break if we find a non-free slot.
303       if (!this->map_man_->search_structure_[this->next_].free_)
304         {
305           break;
306         }
307     }
309 #else
311   this->next_ = this->map_man_->search_structure_[this->next_].next ();
313 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
315   return this->next_ != this->map_man_->occupied_list_id ();
318 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
319 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::reverse_i ()
322 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
324   while (1)
325     {
326       // Go to the prev item in the list.
327       this->next_ = this->map_man_->search_structure_[this->next_].prev ();
329       // Stop if we reach the end.
330       if (this->done ())
331         break;
333       // Break if we find a non-free slot.
334       if (!this->map_man_->search_structure_[this->next_].free_)
335         {
336           break;
337         }
338     }
340 #else
342   this->next_ = this->map_man_->search_structure_[this->next_].prev ();
344 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
346   return this->next_ != this->map_man_->occupied_list_id ();
349 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
350 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &
351 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::map ()
353   return *this->map_man_;
356 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE bool
357 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::operator== (const ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &rhs) const
359   return (this->map_man_ == rhs.map_man_ &&
360           this->next_ == rhs.next_);
363 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE bool
364 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::operator!= (const ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &rhs) const
366   return !this->operator== (rhs);
369 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
370 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Const_Iterator_Base (const ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &mm)
371   : map_man_ (&mm),
372     next_ (this->map_man_->occupied_list_id ())
376 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
377 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::next (ACE_Map_Entry<EXT_ID, INT_ID> *&mm) const
379   if (this->next_ != this->map_man_->occupied_list_id ())
380     {
381       mm = &this->map_man_->search_structure_[this->next_];
382       return 1;
383     }
384   else
385     return 0;
388 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
389 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::done () const
391   return this->next_ == this->map_man_->occupied_list_id ();
394 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
395 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::forward_i ()
398 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
400   while (1)
401     {
402       // Go to the next item in the list.
403       this->next_ = this->map_man_->search_structure_[this->next_].next ();
405       // Stop if we reach the end.
406       if (this->done ())
407         break;
409       // Break if we find a non-free slot.
410       if (!this->map_man_->search_structure_[this->next_].free_)
411         {
412           break;
413         }
414     }
416 #else
418   this->next_ = this->map_man_->search_structure_[this->next_].next ();
420 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
422   return this->next_ != this->map_man_->occupied_list_id ();
425 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
426 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::reverse_i ()
429 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
431   while (1)
432     {
433       // Go to the prev item in the list.
434       this->next_ = this->map_man_->search_structure_[this->next_].prev ();
436       // Stop if we reach the end.
437       if (this->done ())
438         break;
440       // Break if we find a non-free slot.
441       if (!this->map_man_->search_structure_[this->next_].free_)
442         {
443           break;
444         }
445     }
447 #else
449   this->next_ = this->map_man_->search_structure_[this->next_].prev ();
451 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
453   return this->next_ != this->map_man_->occupied_list_id ();
456 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
457 const ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &
458 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::map () const
460   return *this->map_man_;
463 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE bool
464 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::operator== (const ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &rhs) const
466   return (this->map_man_ == rhs.map_man_ &&
467           this->next_ == rhs.next_);
470 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE bool
471 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::operator!= (const ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &rhs) const
473   return !this->operator== (rhs);
476 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
477 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Iterator (ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &mm,
478                                                               int pass_end)
479   : ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> (mm)
481   if (!pass_end)
482     {
484 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
486       // Start here.
487       this->next_ = this->map_man_->occupied_list_.next ();
489       while (1)
490         {
491           // Stop if we reach the end.
492           if (this->done ())
493             break;
495           // Break if we find a non-free slot.
496           if (!this->map_man_->search_structure_[this->next_].free_)
497             {
498               break;
499             }
501           // Go to the next item in the list.
502           this->next_ = this->map_man_->search_structure_[this->next_].next ();
503         }
505 #else
507       this->next_ = this->map_man_->occupied_list_.next ();
509 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
511     }
514 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
515 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::advance ()
517   return this->forward_i ();
520 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
521 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
522 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ ()
524   this->forward_i ();
525   return *this;
528 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
529 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>
530 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)
532   ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
533   ++*this;
534   return retv;
537 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
538 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
539 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- ()
541   this->reverse_i ();
542   return *this;
545 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
546 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>
547 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)
549   ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
550   --*this;
551   return retv;
554 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
555 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Const_Iterator (const ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &mm,
556                                                                           int pass_end)
557   : ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> (mm)
559   if (!pass_end)
560     {
562 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
564       // Start here.
565       this->next_ = this->map_man_->occupied_list_.next ();
567       while (1)
568         {
569           // Stop if we reach the end.
570           if (this->done ())
571             break;
573           // Break if we find a non-free slot.
574           if (!this->map_man_->search_structure_[this->next_].free_)
575             {
576               break;
577             }
579           // Go to the next item in the list.
580           this->next_ = this->map_man_->search_structure_[this->next_].next ();
581         }
583 #else
585       this->next_ = this->map_man_->occupied_list_.next ();
587 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
589     }
592 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
593 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>::advance ()
595   return this->forward_i ();
598 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
599 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
600 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ ()
602   this->forward_i ();
603   return *this;
606 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
607 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>
608 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)
610   ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
611   ++*this;
612   return retv;
615 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
616 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
617 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- ()
619   this->reverse_i ();
620   return *this;
623 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
624 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>
625 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)
627   ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
628   --*this;
629   return retv;
632 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
633 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Reverse_Iterator (ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &mm,
634                                                                               int pass_end)
635   : ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> (mm)
637   if (!pass_end)
638     {
640 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
642       // Start here.
643       this->next_ = this->map_man_->occupied_list_.prev ();
645       while (1)
646         {
647           // Stop if we reach the end.
648           if (this->done ())
649             break;
651           // Break if we find a non-free slot.
652           if (!this->map_man_->search_structure_[this->next_].free_)
653             {
654               break;
655             }
657           // Go to the prev item in the list.
658           this->next_ = this->map_man_->search_structure_[this->next_].prev ();
659         }
661 #else
663       this->next_ = this->map_man_->occupied_list_.prev ();
665 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
670 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
671 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::advance ()
673   return this->reverse_i ();
676 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
677 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
678 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ ()
680   this->reverse_i ();
681   return *this;
684 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
685 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>
686 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)
688   ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
689   ++*this;
690   return retv;
693 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
694 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
695 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- ()
697   this->forward_i ();
698   return *this;
701 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
702 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>
703 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)
705   ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
706   --*this;
707   return retv;
710 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
711 ACE_Map_Entry<EXT_ID, INT_ID>&
712 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::operator* () const
714   ACE_Map_Entry<EXT_ID, INT_ID> *retv = 0;
716   int const result = this->next (retv);
717   ACE_ASSERT (result != 0);
718   ACE_UNUSED_ARG (result);
720   return *retv;
723 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
724 ACE_Map_Entry<EXT_ID, INT_ID>&
725 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::operator* () const
727   ACE_Map_Entry<EXT_ID, INT_ID> *retv = 0;
729   int const result = this->next (retv);
730   ACE_ASSERT (result != 0);
731   ACE_UNUSED_ARG (result);
733   return *retv;
737 ACE_END_VERSIONED_NAMESPACE_DECL