[7297] Fixed profession spells sorting in trainer spell list at client.
[getmangos.git] / dep / ACE_wrappers / ace / Map_Manager.h
blob4e361216f2956db0c5b33dab977290cbfd5adf05
1 // -*- C++ -*-
3 //=============================================================================
4 /**
5 * @file Map_Manager.h
7 * $Id: Map_Manager.h 80826 2008-03-04 14:51:23Z wotte $
9 * @author Douglas C. Schmidt <schmidt@cs.wustl.edu>
11 //=============================================================================
13 #ifndef ACE_MAP_MANAGER_H
14 #define ACE_MAP_MANAGER_H
16 #include /**/ "ace/pre.h"
18 #include /**/ "ace/config-all.h"
20 #if !defined (ACE_LACKS_PRAGMA_ONCE)
21 # pragma once
22 #endif /* ACE_LACKS_PRAGMA_ONCE */
24 #include "ace/Basic_Types.h"
25 #include "ace/Global_Macros.h"
26 #include "ace/Default_Constants.h"
28 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
30 // Forward declaration.
31 class ACE_Allocator;
33 /**
34 * @class ACE_Map_Entry
36 * @brief An entry in the Map.
38 template <class EXT_ID, class INT_ID>
39 class ACE_Map_Entry
41 public:
42 /// Initialize member variables.
43 ACE_Map_Entry (void);
45 /// We need this destructor to keep some compilers from complaining.
46 /// It's just a no-op, however.
47 ~ACE_Map_Entry (void);
49 /// Key used to look up an entry.
50 EXT_ID ext_id_;
52 /// The contents of the entry itself.
53 INT_ID int_id_;
55 /// Dump the state of an object.
56 void dump (void) const;
58 /// Declare the dynamic allocation hooks.
59 ACE_ALLOC_HOOK_DECLARE;
61 // = These are really private, but unfortunately template friends
62 // are not portable.
64 /// Get next entry.
65 ACE_UINT32 next (void) const;
67 /// Set next entry.
68 void next (ACE_UINT32 n);
70 /// Get prev entry.
71 ACE_UINT32 prev (void) const;
73 /// Set prev entry.
74 void prev (ACE_UINT32 p);
76 /// Keeps track of the next entry.
77 ACE_UINT32 next_;
79 /// Keeps track of the previous entry.
80 ACE_UINT32 prev_;
82 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
84 /// Is this entry free?
85 bool free_;
87 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
91 // Forward decl.
92 template <class EXT_ID, class INT_ID, class ACE_LOCK>
93 class ACE_Map_Iterator_Base;
95 // Forward decl.
96 template <class EXT_ID, class INT_ID, class ACE_LOCK>
97 class ACE_Map_Const_Iterator_Base;
99 // Forward decl.
100 template <class EXT_ID, class INT_ID, class ACE_LOCK>
101 class ACE_Map_Iterator;
103 // Forward decl.
104 template <class EXT_ID, class INT_ID, class ACE_LOCK>
105 class ACE_Map_Const_Iterator;
107 // Forward decl.
108 template <class EXT_ID, class INT_ID, class ACE_LOCK>
109 class ACE_Map_Reverse_Iterator;
112 * @class ACE_Map_Manager
114 * @brief Define a map abstraction that associates <EXT_ID>s with
115 * <INT_ID>s.
117 * The <EXT_ID> must support <operator==>. This constraint can
118 * be alleviated via template specialization, as shown in the
119 * $ACE_ROOT/tests/Conn_Test.cpp test.
120 * This class uses an ACE_Allocator to allocate memory. The
121 * user can make this a persistant class by providing an
122 * ACE_Allocator with a persistable memory pool.
123 * This implementation of a map uses an array, which is searched
124 * linearly. For more efficient searching you should use the
125 * <ACE_Hash_Map_Manager>.
127 template <class EXT_ID, class INT_ID, class ACE_LOCK>
128 class ACE_Map_Manager
130 public:
131 friend class ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>;
132 friend class ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>;
133 friend class ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>;
134 friend class ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>;
135 friend class ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>;
137 // = Traits.
138 typedef EXT_ID KEY;
139 typedef INT_ID VALUE;
140 typedef ACE_LOCK lock_type;
141 typedef ACE_Map_Entry<EXT_ID, INT_ID> ENTRY;
142 typedef ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> ITERATOR;
143 typedef ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> CONST_ITERATOR;
144 typedef ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> REVERSE_ITERATOR;
146 typedef ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> iterator;
147 typedef ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> const_iterator;
148 typedef ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> reverse_iterator;
150 // = Initialization and termination methods.
151 /// Initialize a ACE_Map_Manager with the ACE_DEFAULT_MAP_SIZE.
152 ACE_Map_Manager (ACE_Allocator *alloc = 0);
154 /// Initialize a ACE_Map_Manager with @a size entries.
155 ACE_Map_Manager (size_t size,
156 ACE_Allocator *alloc = 0);
158 /// Initialize a ACE_Map_Manager with size @a length.
159 int open (size_t length = ACE_DEFAULT_MAP_SIZE,
160 ACE_Allocator *alloc = 0);
162 /// Close down a ACE_Map_Manager and release dynamically allocated
163 /// resources.
164 int close (void);
166 /// Close down a ACE_Map_Manager and release dynamically allocated
167 /// resources.
168 ~ACE_Map_Manager (void);
171 * Associate @a ext_id with @a int_id. If @a ext_id is already in the
172 * map then the ACE_Map_Entry is not changed.
173 * @retval 0 If a new entry is bound successfully.
174 * @retval 1 If an attempt is made to bind an existing entry.
175 * @retval -1 If failures occur.
177 int bind (const EXT_ID &ext_id,
178 const INT_ID &int_id);
181 * Reassociate @a ext_id with @a int_id. If @a ext_id is not in the
182 * map then behaves just like bind(). Otherwise, store the old
183 * values of @a ext_id and @a int_id into the "out" parameters and
184 * rebind the new parameters. This is very useful if you need to
185 * have an atomic way of updating <Map_Entries> and you also need
186 * full control over memory allocation.
187 * @retval 0 If a new entry is bound successfully.
188 * @retval 1 If an existing entry was rebound.
189 * @retval -1 If failures occur.
191 int rebind (const EXT_ID &ext_id,
192 const INT_ID &int_id,
193 EXT_ID &old_ext_id,
194 INT_ID &old_int_id);
197 * Reassociate @a ext_id with @a int_id. If @a ext_id is not in the
198 * map then behaves just like <bind>. Otherwise, store the old
199 * values of @a int_id into the "out" parameter and rebind the new
200 * parameters.
201 * @retval 0 If a new entry is bound successfully.
202 * @retval 1 If an existing entry was rebound.
203 * @retval -1 If failures occur.
205 int rebind (const EXT_ID &ext_id,
206 const INT_ID &int_id,
207 INT_ID &old_int_id);
209 /// Reassociate @a ext_id with @a int_id. Old values in the map are
210 /// ignored.
211 int rebind (const EXT_ID &ext_id,
212 const INT_ID &int_id);
215 * Associate @a ext_id with @a int_id if and only if @a ext_id is not
216 * in the map. If @a ext_id is already in the map then the @a int_id
217 * parameter is overwritten with the existing value in the map
218 * @retval 0 If a new entry is bound successfully.
219 * @retval 1 If an attempt is made to bind an existing entry.
220 * @retval -1 If failures occur.
222 int trybind (const EXT_ID &ext_id,
223 INT_ID &int_id);
226 * Locate @a ext_id and pass out parameter via @a int_id.
227 * @retval 0 If found.
228 * @retval -1 If not found.
230 int find (const EXT_ID &ext_id,
231 INT_ID &int_id) const;
233 /// Returns 0 if the @a ext_id is in the mapping, otherwise -1.
234 int find (const EXT_ID &ext_id) const;
237 * Unbind (remove) the @a ext_id from the map. Don't return the
238 * @a int_id to the caller (this is useful for collections where the
239 * @a int_ids are *not* dynamically allocated...) Returns 0 if
240 * successful, else -1.
242 int unbind (const EXT_ID &ext_id);
245 * Break any association of @a ext_id. Returns the value of @a int_id
246 * in case the caller needs to deallocate memory. Returns 0 if
247 * successful, else -1.
249 int unbind (const EXT_ID &ext_id,
250 INT_ID &int_id);
253 * Unbind all entires.
255 void unbind_all (void);
257 /// Return the current size of the map.
258 size_t current_size (void) const;
260 /// Return the total size of the map.
261 size_t total_size (void) const;
264 * Returns a reference to the underlying <ACE_LOCK>. This makes it
265 * possible to acquire the lock explicitly, which can be useful in
266 * some cases if you instantiate the ACE_Atomic_Op with an
267 * ACE_Recursive_Mutex or ACE_Process_Mutex, or if you need to
268 * guard the state of an iterator.
269 * @note The right name would be <lock>, but HP/C++ will choke on that!
271 ACE_LOCK &mutex (void);
273 /// Dump the state of an object.
274 void dump (void) const;
276 // = STL styled iterator factory functions.
278 /// Return forward iterator.
279 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> begin (void);
280 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> end (void);
282 /// Return reverse iterator.
283 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> rbegin (void);
284 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> rend (void);
286 /// Declare the dynamic allocation hooks.
287 ACE_ALLOC_HOOK_DECLARE;
289 protected:
291 // = The following methods do the actual work.
293 // These methods assume that the locks are held by the private
294 // methods.
296 /// Performs the binding of @a ext_id to @a int_id. Must be called
297 /// with locks held.
298 int bind_i (const EXT_ID &ext_id,
299 const INT_ID &int_id);
301 /// Bind an entry (without finding first). Must be called with locks
302 /// held.
303 int shared_bind (const EXT_ID &ext_id,
304 const INT_ID &int_id);
306 /// Performs a rebinding of <ext_it> to @a int_id. Also, recovers old
307 /// values. Must be called with locks held.
308 int rebind_i (const EXT_ID &ext_id,
309 const INT_ID &int_id,
310 EXT_ID &old_ext_id,
311 INT_ID &old_int_id);
313 /// Performs a rebinding of <ext_it> to @a int_id. Also, recovers old
314 /// values. Must be called with locks held.
315 int rebind_i (const EXT_ID &ext_id,
316 const INT_ID &int_id,
317 INT_ID &old_int_id);
319 /// Performs a rebinding of <ext_it> to @a int_id. Must be called
320 /// with locks held.
321 int rebind_i (const EXT_ID &ext_id,
322 const INT_ID &int_id);
324 /// Performs a conditional bind of @a int_id using @a ext_id as the
325 /// key. Must be called with locks held.
326 int trybind_i (const EXT_ID &ext_id,
327 INT_ID &int_id);
329 /// Performs a find of @a int_id using @a ext_id as the key. Must be
330 /// called with locks held.
331 int find_i (const EXT_ID &ext_id,
332 INT_ID &int_id);
334 /// Performs a find using @a ext_id as the key. Must be called with
335 /// locks held.
336 int find_and_return_index (const EXT_ID &ext_id,
337 ACE_UINT32 &slot);
339 /// Performs an unbind of @a int_id using @a ext_id as the key. Must
340 /// be called with locks held.
341 int unbind_i (const EXT_ID &ext_id,
342 INT_ID &int_id);
344 /// Performs an unbind using @a ext_id as the key. Must be called
345 /// with locks held.
346 int unbind_i (const EXT_ID &ext_id);
348 /// Performs an unbind using @a ext_id as the key. Must be called
349 /// with locks held.
350 int unbind_and_return_index (const EXT_ID &ext_id,
351 ACE_UINT32 &slot);
353 /// Unbind @a slot.
354 void unbind_slot (ACE_UINT32 slot);
356 /// Resize the map. Must be called with locks held.
357 int resize_i (ACE_UINT32 size);
359 /// Close down a <Map_Manager>. Must be called with locks held.
360 int close_i (void);
362 /// Returns 1 if <id1> == <id2>, else 0. This is defined as a
363 /// separate method to facilitate template specialization.
364 int equal (const EXT_ID &id1, const EXT_ID &id2);
366 /// This function returns the new size of the Map Manager. This
367 /// function is called when we run out of room and need to resize.
368 ACE_UINT32 new_size (void);
370 /// Explicitly call the destructors and free up the
371 /// <search_structure_>.
372 void free_search_structure (void);
374 /// Id of the free list sentinel.
375 ACE_UINT32 free_list_id (void) const;
377 /// Id of the occupied list sentinel.
378 ACE_UINT32 occupied_list_id (void) const;
380 /// Finds the next free slot.
381 int next_free (ACE_UINT32 &slot);
383 /// Move from free list to occupied list.
384 void move_from_free_list_to_occupied_list (ACE_UINT32 slot);
386 /// Move from occupied list to free list.
387 void move_from_occupied_list_to_free_list (ACE_UINT32 slot);
389 #if defined (ACE_HAS_LAZY_MAP_MANAGER)
392 * In the case of lazy map managers, the movement of free slots from
393 * the occupied list to the free list is delayed until we run out of
394 * free slots in the free list. This function goes through the
395 * entire occupied list, moving free slots to the free list.
397 void move_all_free_slots_from_occupied_list (void);
399 #endif /* ACE_HAS_LAZY_MAP_MANAGER */
401 /// Move helper.
402 void shared_move (ACE_UINT32 slot,
403 ACE_Map_Entry<EXT_ID, INT_ID> &current_list,
404 ACE_UINT32 current_list_id,
405 ACE_Map_Entry<EXT_ID, INT_ID> &new_list,
406 ACE_UINT32 new_list_id);
408 /// Pointer to a memory allocator.
409 ACE_Allocator *allocator_;
411 /// Synchronization variable for the MT_SAFE ACE_Map_Manager.
412 mutable ACE_LOCK lock_;
414 /// Implement the Map as a resizeable array of ACE_Map_Entry.
415 ACE_Map_Entry<EXT_ID, INT_ID> *search_structure_;
417 /// Total number of elements in this->search_structure_.
418 ACE_UINT32 total_size_;
420 /// Current size of the map.
421 ACE_UINT32 cur_size_;
423 /// Free list.
424 ACE_Map_Entry<EXT_ID, INT_ID> free_list_;
426 /// Occupied list.
427 ACE_Map_Entry<EXT_ID, INT_ID> occupied_list_;
429 enum
431 /// Grow map exponentially up to 64K
432 MAX_EXPONENTIAL = 64 * 1024,
434 /// Afterwards grow in chunks of 32K
435 LINEAR_INCREASE = 32 * 1024
438 private:
439 // = Disallow these operations.
440 ACE_UNIMPLEMENTED_FUNC (void operator= (const ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &))
441 ACE_UNIMPLEMENTED_FUNC (ACE_Map_Manager (const ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &))
445 * @class ACE_Map_Iterator_Base
447 * @brief Iterator for the ACE_Map_Manager.
449 * This class factors out common code from its templatized
450 * subclasses.
452 template <class EXT_ID, class INT_ID, class ACE_LOCK>
453 class ACE_Map_Iterator_Base
455 public:
456 // = Initialization method.
457 /// Contructor. If head != 0, the iterator constructed is positioned
458 /// at the head of the map, it is positioned at the end otherwise.
459 ACE_Map_Iterator_Base (ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> &mm);
461 // = Iteration methods.
463 /// Pass back the next <entry> that hasn't been seen in the Set.
464 /// Returns 0 when all items have been seen, else 1.
465 int next (ACE_Map_Entry<EXT_ID, INT_ID> *&next_entry) const;
467 /// Returns 1 when all items have been seen, else 0.
468 int done (void) const;
470 /// Returns a reference to the interal element @c this is pointing to.
471 ACE_Map_Entry<EXT_ID, INT_ID>& operator* (void) const;
473 /// Returns reference the Map_Manager that is being iterated
474 /// over.
475 ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>& map (void);
477 /// Check if two iterators point to the same position
478 bool operator== (const ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &) const;
479 bool operator!= (const ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &) const;
481 /// Declare the dynamic allocation hooks.
482 ACE_ALLOC_HOOK_DECLARE;
484 protected:
485 /// Move forward by one element in the set. Returns 0 when there's
486 /// no more item in the set after the current items, else 1.
487 int forward_i (void);
489 /// Move backware by one element in the set. Returns 0 when there's
490 /// no more item in the set before the current item, else 1.
491 int reverse_i (void);
493 /// Dump the state of an object.
494 void dump_i (void) const;
496 /// Map we are iterating over.
497 ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> *map_man_;
499 /// Keeps track of how far we've advanced...
500 ACE_UINT32 next_;
504 * @class ACE_Map_Const_Iterator_Base
506 * @brief Const iterator for the ACE_Map_Manager.
508 * This class factors out common code from its templatized
509 * subclasses.
511 template <class EXT_ID, class INT_ID, class ACE_LOCK>
512 class ACE_Map_Const_Iterator_Base
514 public:
515 // = Initialization method.
516 /// Contructor. If head != 0, the iterator constructed is positioned
517 /// at the head of the map, it is positioned at the end otherwise.
518 ACE_Map_Const_Iterator_Base (const ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> &mm);
520 // = Iteration methods.
522 /// Pass back the next <entry> that hasn't been seen in the Set.
523 /// Returns 0 when all items have been seen, else 1.
524 int next (ACE_Map_Entry<EXT_ID, INT_ID> *&next_entry) const;
526 /// Returns 1 when all items have been seen, else 0.
527 int done (void) const;
529 /// Returns a reference to the interal element @c this is pointing to.
530 ACE_Map_Entry<EXT_ID, INT_ID>& operator* (void) const;
532 /// Returns reference the Map_Manager that is being iterated
533 /// over.
534 const ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>& map (void) const;
536 /// Check if two iterators point to the same position
537 bool operator== (const ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &) const;
538 bool operator!= (const ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &) const;
540 /// Declare the dynamic allocation hooks.
541 ACE_ALLOC_HOOK_DECLARE;
543 protected:
544 /// Move forward by one element in the set. Returns 0 when there's
545 /// no more item in the set after the current items, else 1.
546 int forward_i (void);
548 /// Move backware by one element in the set. Returns 0 when there's
549 /// no more item in the set before the current item, else 1.
550 int reverse_i (void);
552 /// Dump the state of an object.
553 void dump_i (void) const;
555 /// Map we are iterating over.
556 const ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> *map_man_;
558 /// Keeps track of how far we've advanced...
559 ACE_UINT32 next_;
563 * @class ACE_Map_Iterator
565 * @brief Forward iterator for the ACE_Map_Manager.
567 * This class does not perform any internal locking of the
568 * ACE_Map_Manager it is iterating upon since locking is
569 * inherently inefficient and/or error-prone within an STL-style
570 * iterator. If you require locking, you can explicitly use an
571 * ACE_Guard or ACE_Read_Guard on the ACE_Map_Manager's
572 * internal lock, which is accessible via its <mutex> method.
574 template <class EXT_ID, class INT_ID, class ACE_LOCK>
575 class ACE_Map_Iterator : public ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>
577 public:
578 // = Initialization method.
579 ACE_Map_Iterator (ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> &mm,
580 int pass_end = 0);
582 // = Iteration methods.
584 /// Move forward by one element in the set. Returns 0 when all the
585 /// items in the set have been seen, else 1.
586 int advance (void);
588 /// Dump the state of an object.
589 void dump (void) const;
591 // = STL styled iteration, compare, and reference functions.
593 /// Prefix advance.
594 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator++ (void);
596 /// Postfix advance.
597 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator++ (int);
599 /// Prefix reverse.
600 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void);
602 /// Postfix reverse.
603 ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int);
605 /// Declare the dynamic allocation hooks.
606 ACE_ALLOC_HOOK_DECLARE;
610 * @class ACE_Map_Const_Iterator
612 * @brief Forward const iterator for the ACE_Map_Manager.
614 * This class does not perform any internal locking of the
615 * ACE_Map_Manager it is iterating upon since locking is
616 * inherently inefficient and/or error-prone within an STL-style
617 * iterator. If you require locking, you can explicitly use an
618 * ACE_Guard or ACE_Read_Guard on the ACE_Map_Manager's
619 * internal lock, which is accessible via its <mutex> method.
621 template <class EXT_ID, class INT_ID, class ACE_LOCK>
622 class ACE_Map_Const_Iterator : public ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>
624 public:
625 // = Initialization method.
626 ACE_Map_Const_Iterator (const ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> &mm,
627 int pass_end = 0);
629 // = Iteration methods.
631 /// Move forward by one element in the set. Returns 0 when all the
632 /// items in the set have been seen, else 1.
633 int advance (void);
635 /// Dump the state of an object.
636 void dump (void) const;
638 // = STL styled iteration, compare, and reference functions.
640 /// Prefix advance.
641 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator++ (void);
643 /// Postfix advance.
644 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator++ (int);
646 /// Prefix reverse.
647 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void);
649 /// Postfix reverse.
650 ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int);
652 /// Declare the dynamic allocation hooks.
653 ACE_ALLOC_HOOK_DECLARE;
657 * @class ACE_Map_Reverse_Iterator
659 * @brief Reverse Iterator for the ACE_Map_Manager.
661 * This class does not perform any internal locking of the
662 * ACE_Map_Manager it is iterating upon since locking is
663 * inherently inefficient and/or error-prone within an STL-style
664 * iterator. If you require locking, you can explicitly use an
665 * ACE_Guard or ACE_Read_Guard on the ACE_Map_Manager's
666 * internal lock, which is accessible via its <mutex> method.
668 template <class EXT_ID, class INT_ID, class ACE_LOCK>
669 class ACE_Map_Reverse_Iterator : public ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>
671 public:
672 // = Initialization method.
673 ACE_Map_Reverse_Iterator (ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> &mm,
674 int pass_end = 0);
676 // = Iteration methods.
678 /// Move forward by one element in the set. Returns 0 when all the
679 /// items in the set have been seen, else 1.
680 int advance (void);
682 /// Dump the state of an object.
683 void dump (void) const;
685 // = STL styled iteration, compare, and reference functions.
687 /// Prefix reverse.
688 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator++ (void);
690 /// Postfix reverse.
691 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator++ (int);
693 /// Prefix advance.
694 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void);
696 /// Postfix advance.
697 ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int);
699 /// Declare the dynamic allocation hooks.
700 ACE_ALLOC_HOOK_DECLARE;
703 ACE_END_VERSIONED_NAMESPACE_DECL
705 #if defined (__ACE_INLINE__)
706 #include "ace/Map_Manager.inl"
707 #endif /* __ACE_INLINE__ */
709 #if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
710 #include "ace/Map_Manager.cpp"
711 #endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
713 #if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
714 #pragma implementation ("Map_Manager.cpp")
715 #endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
717 #include /**/ "ace/post.h"
719 #endif /* ACE_MAP_MANAGER_H */