GitHub Actions: Try MSVC builds with /std:c++17 and 20
[ACE_TAO.git] / ACE / ace / Map_Manager.inl
blob3c132b4f9bfa23cfbb3af5761557043e60335722
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
8 ACE_Map_Entry<EXT_ID, INT_ID>::ACE_Map_Entry (void)
9   : next_ (0),
10     prev_ (0)
11 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
12     , free_ (1)
13 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
17 template <class EXT_ID, class INT_ID> ACE_INLINE
18 ACE_Map_Entry<EXT_ID, INT_ID>::~ACE_Map_Entry (void)
20   // No-op just to keep some compilers happy...
23 template <class EXT_ID, class INT_ID> ACE_INLINE ACE_UINT32
24 ACE_Map_Entry<EXT_ID, INT_ID>::next (void) const
26   return this->next_;
29 template <class EXT_ID, class INT_ID> ACE_INLINE void
30 ACE_Map_Entry<EXT_ID, INT_ID>::next (ACE_UINT32 n)
32   this->next_ = n;
35 template <class EXT_ID, class INT_ID> ACE_INLINE ACE_UINT32
36 ACE_Map_Entry<EXT_ID, INT_ID>::prev (void) const
38   return this->prev_;
41 template <class EXT_ID, class INT_ID> ACE_INLINE void
42 ACE_Map_Entry<EXT_ID, INT_ID>::prev (ACE_UINT32 p)
44   this->prev_ = p;
47 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
48 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Manager (size_t size,
49                                                             ACE_Allocator *alloc)
50   : allocator_ (0),
51     search_structure_ (0),
52     total_size_ (0),
53     cur_size_ (0)
55   if (this->open (size, alloc) == -1)
56     ACELIB_ERROR ((LM_ERROR, ACE_TEXT ("ACE_Map_Manager\n")));
59 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
60 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Manager (ACE_Allocator *alloc)
61   : allocator_ (0),
62     search_structure_ (0),
63     total_size_ (0),
64     cur_size_ (0)
66   if (this->open (ACE_DEFAULT_MAP_SIZE, alloc) == -1)
67     ACELIB_ERROR ((LM_ERROR, ACE_TEXT ("ACE_Map_Manager\n")));
70 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
71 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::close (void)
73   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
75   return this->close_i ();
78 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
79 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::~ACE_Map_Manager (void)
81   this->close ();
84 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
85 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::bind (const EXT_ID &ext_id,
86                                                  const INT_ID &int_id)
88   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
90   return this->bind_i (ext_id,
91                        int_id);
94 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
95 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::rebind (const EXT_ID &ext_id,
96                                                    const INT_ID &int_id,
97                                                    EXT_ID &old_ext_id,
98                                                    INT_ID &old_int_id)
100   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
102   return this->rebind_i (ext_id,
103                          int_id,
104                          old_ext_id,
105                          old_int_id);
108 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
109 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::rebind (const EXT_ID &ext_id,
110                                                    const INT_ID &int_id,
111                                                    INT_ID &old_int_id)
113   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
115   return this->rebind_i (ext_id,
116                          int_id,
117                          old_int_id);
120 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
121 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::rebind (const EXT_ID &ext_id,
122                                                    const INT_ID &int_id)
124   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
126   return this->rebind_i (ext_id,
127                          int_id);
130 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
131 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::trybind (const EXT_ID &ext_id,
132                                                     INT_ID &int_id)
134   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
136   return this->trybind_i (ext_id,
137                           int_id);
140 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
141 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::find (const EXT_ID &ext_id) const
143   ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> *nc_this =
144     (ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> *) this;
145   ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, nc_this->lock_, -1);
147   ACE_UINT32 slot = 0;
148   return nc_this->find_and_return_index (ext_id, slot);
151 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
152 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::find (const EXT_ID &ext_id,
153                                                  INT_ID &int_id) const
155   ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> *nc_this =
156     (ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> *) this;
157   ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, nc_this->lock_, -1);
159   return nc_this->find_i (ext_id, int_id);
162 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
163 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::unbind_i (const EXT_ID &ext_id)
165   // Unbind the entry.
166   ACE_UINT32 slot = 0;
167   return this->unbind_and_return_index (ext_id,
168                                         slot);
171 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
172 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::unbind (const EXT_ID &ext_id,
173                                                    INT_ID &int_id)
175   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
177   return this->unbind_i (ext_id,
178                          int_id);
181 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
182 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::unbind (const EXT_ID &ext_id)
184   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1);
185   return this->unbind_i (ext_id);
188 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE size_t
189 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::current_size (void) const
191   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, static_cast<size_t> (-1));
192   return this->cur_size_;
195 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE size_t
196 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::total_size (void) const
198   ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, static_cast<size_t> (-1));
199   return this->total_size_;
202 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE ACE_LOCK &
203 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::mutex (void)
205   return this->lock_;
208 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE void
209 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::move_from_free_list_to_occupied_list (ACE_UINT32 slot)
211   this->shared_move (slot,
212                      this->free_list_,
213                      this->free_list_id (),
214                      this->occupied_list_,
215                      this->occupied_list_id ());
218 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE void
219 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::move_from_occupied_list_to_free_list (ACE_UINT32 slot)
221   this->shared_move (slot,
222                      this->occupied_list_,
223                      this->occupied_list_id (),
224                      this->free_list_,
225                      this->free_list_id ());
228 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
229 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::equal (const EXT_ID &id1,
230                                                   const EXT_ID &id2)
232   return id1 == id2;
235 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE ACE_UINT32
236 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::free_list_id (void) const
238   // If you change ~0, please change
239   // ACE_Active_Map_Manager_Key::ACE_Active_Map_Manager_Key()
240   // accordingly.
241   return (ACE_UINT32) ~0;
244 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE ACE_UINT32
245 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::occupied_list_id (void) const
247   return (ACE_UINT32) ~1;
250 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
251 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>
252 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::begin (void)
254   return ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> (*this);
257 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
258 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>
259 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::end (void)
261   return ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> (*this, 1);
264 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
265 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>
266 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::rbegin (void)
268   return ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> (*this);
271 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
272 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>
273 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>::rend (void)
275   return ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> (*this, 1);
278 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
279 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Iterator_Base (ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &mm)
280   : map_man_ (&mm),
281     next_ (map_man_->occupied_list_id ())
285 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
286 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::next (ACE_Map_Entry<EXT_ID, INT_ID> *&mm) const
288   if (this->next_ != this->map_man_->occupied_list_id ())
289     {
290       mm = &this->map_man_->search_structure_[this->next_];
291       return 1;
292     }
293   else
294     return 0;
297 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
298 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::done (void) const
300   return this->next_ == this->map_man_->occupied_list_id ();
303 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
304 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::forward_i (void)
307 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
309   while (1)
310     {
311       // Go to the next item in the list.
312       this->next_ = this->map_man_->search_structure_[this->next_].next ();
314       // Stop if we reach the end.
315       if (this->done ())
316         break;
318       // Break if we find a non-free slot.
319       if (!this->map_man_->search_structure_[this->next_].free_)
320         {
321           break;
322         }
323     }
325 #else
327   this->next_ = this->map_man_->search_structure_[this->next_].next ();
329 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
331   return this->next_ != this->map_man_->occupied_list_id ();
334 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
335 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::reverse_i (void)
338 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
340   while (1)
341     {
342       // Go to the prev item in the list.
343       this->next_ = this->map_man_->search_structure_[this->next_].prev ();
345       // Stop if we reach the end.
346       if (this->done ())
347         break;
349       // Break if we find a non-free slot.
350       if (!this->map_man_->search_structure_[this->next_].free_)
351         {
352           break;
353         }
354     }
356 #else
358   this->next_ = this->map_man_->search_structure_[this->next_].prev ();
360 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
362   return this->next_ != this->map_man_->occupied_list_id ();
365 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
366 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &
367 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::map (void)
369   return *this->map_man_;
372 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE bool
373 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::operator== (const ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &rhs) const
375   return (this->map_man_ == rhs.map_man_ &&
376           this->next_ == rhs.next_);
379 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE bool
380 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::operator!= (const ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &rhs) const
382   return !this->operator== (rhs);
385 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
386 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)
387   : map_man_ (&mm),
388     next_ (this->map_man_->occupied_list_id ())
392 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
393 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::next (ACE_Map_Entry<EXT_ID, INT_ID> *&mm) const
395   if (this->next_ != this->map_man_->occupied_list_id ())
396     {
397       mm = &this->map_man_->search_structure_[this->next_];
398       return 1;
399     }
400   else
401     return 0;
404 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
405 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::done (void) const
407   return this->next_ == this->map_man_->occupied_list_id ();
410 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
411 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::forward_i (void)
414 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
416   while (1)
417     {
418       // Go to the next item in the list.
419       this->next_ = this->map_man_->search_structure_[this->next_].next ();
421       // Stop if we reach the end.
422       if (this->done ())
423         break;
425       // Break if we find a non-free slot.
426       if (!this->map_man_->search_structure_[this->next_].free_)
427         {
428           break;
429         }
430     }
432 #else
434   this->next_ = this->map_man_->search_structure_[this->next_].next ();
436 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
438   return this->next_ != this->map_man_->occupied_list_id ();
441 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
442 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::reverse_i (void)
445 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
447   while (1)
448     {
449       // Go to the prev item in the list.
450       this->next_ = this->map_man_->search_structure_[this->next_].prev ();
452       // Stop if we reach the end.
453       if (this->done ())
454         break;
456       // Break if we find a non-free slot.
457       if (!this->map_man_->search_structure_[this->next_].free_)
458         {
459           break;
460         }
461     }
463 #else
465   this->next_ = this->map_man_->search_structure_[this->next_].prev ();
467 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
469   return this->next_ != this->map_man_->occupied_list_id ();
472 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
473 const ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &
474 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::map (void) const
476   return *this->map_man_;
479 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE bool
480 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
482   return (this->map_man_ == rhs.map_man_ &&
483           this->next_ == rhs.next_);
486 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE bool
487 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
489   return !this->operator== (rhs);
492 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
493 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Iterator (ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &mm,
494                                                               int pass_end)
495   : ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> (mm)
497   if (!pass_end)
498     {
500 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
502       // Start here.
503       this->next_ = this->map_man_->occupied_list_.next ();
505       while (1)
506         {
507           // Stop if we reach the end.
508           if (this->done ())
509             break;
511           // Break if we find a non-free slot.
512           if (!this->map_man_->search_structure_[this->next_].free_)
513             {
514               break;
515             }
517           // Go to the next item in the list.
518           this->next_ = this->map_man_->search_structure_[this->next_].next ();
519         }
521 #else
523       this->next_ = this->map_man_->occupied_list_.next ();
525 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
527     }
530 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
531 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::advance (void)
533   return this->forward_i ();
536 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
537 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
538 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void)
540   this->forward_i ();
541   return *this;
544 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
545 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>
546 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)
548   ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
549   ++*this;
550   return retv;
553 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
554 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
555 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)
557   this->reverse_i ();
558   return *this;
561 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
562 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>
563 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)
565   ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
566   --*this;
567   return retv;
570 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
571 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,
572                                                                           int pass_end)
573   : ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> (mm)
575   if (!pass_end)
576     {
578 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
580       // Start here.
581       this->next_ = this->map_man_->occupied_list_.next ();
583       while (1)
584         {
585           // Stop if we reach the end.
586           if (this->done ())
587             break;
589           // Break if we find a non-free slot.
590           if (!this->map_man_->search_structure_[this->next_].free_)
591             {
592               break;
593             }
595           // Go to the next item in the list.
596           this->next_ = this->map_man_->search_structure_[this->next_].next ();
597         }
599 #else
601       this->next_ = this->map_man_->occupied_list_.next ();
603 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
605     }
608 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
609 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>::advance (void)
611   return this->forward_i ();
614 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
615 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
616 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void)
618   this->forward_i ();
619   return *this;
622 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
623 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>
624 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)
626   ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
627   ++*this;
628   return retv;
631 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
632 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
633 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)
635   this->reverse_i ();
636   return *this;
639 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
640 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>
641 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)
643   ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
644   --*this;
645   return retv;
648 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
649 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Reverse_Iterator (ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &mm,
650                                                                               int pass_end)
651   : ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> (mm)
653   if (!pass_end)
654     {
656 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
658       // Start here.
659       this->next_ = this->map_man_->occupied_list_.prev ();
661       while (1)
662         {
663           // Stop if we reach the end.
664           if (this->done ())
665             break;
667           // Break if we find a non-free slot.
668           if (!this->map_man_->search_structure_[this->next_].free_)
669             {
670               break;
671             }
673           // Go to the prev item in the list.
674           this->next_ = this->map_man_->search_structure_[this->next_].prev ();
675         }
677 #else
679       this->next_ = this->map_man_->occupied_list_.prev ();
681 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
686 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE int
687 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::advance (void)
689   return this->reverse_i ();
692 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
693 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
694 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void)
696   this->reverse_i ();
697   return *this;
700 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
701 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>
702 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)
704   ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
705   ++*this;
706   return retv;
709 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
710 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
711 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)
713   this->forward_i ();
714   return *this;
717 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
718 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>
719 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)
721   ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
722   --*this;
723   return retv;
726 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
727 ACE_Map_Entry<EXT_ID, INT_ID>&
728 ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::operator* (void) const
730   ACE_Map_Entry<EXT_ID, INT_ID> *retv = 0;
732   int const result = this->next (retv);
733   ACE_ASSERT (result != 0);
734   ACE_UNUSED_ARG (result);
736   return *retv;
739 template <class EXT_ID, class INT_ID, class ACE_LOCK> ACE_INLINE
740 ACE_Map_Entry<EXT_ID, INT_ID>&
741 ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::operator* (void) const
743   ACE_Map_Entry<EXT_ID, INT_ID> *retv = 0;
745   int const result = this->next (retv);
746   ACE_ASSERT (result != 0);
747   ACE_UNUSED_ARG (result);
749   return *retv;
753 ACE_END_VERSIONED_NAMESPACE_DECL