diff options
Diffstat (limited to 'ace/Map_Manager.h')
-rw-r--r-- | ace/Map_Manager.h | 712 |
1 files changed, 0 insertions, 712 deletions
diff --git a/ace/Map_Manager.h b/ace/Map_Manager.h deleted file mode 100644 index 48db1161f33..00000000000 --- a/ace/Map_Manager.h +++ /dev/null @@ -1,712 +0,0 @@ -// -*- C++ -*- - -//============================================================================= -/** - * @file Map_Manager.h - * - * $Id$ - * - * @author Douglas C. Schmidt <schmidt@cs.wustl.edu> - */ -//============================================================================= - -#ifndef ACE_MAP_MANAGER_H -#define ACE_MAP_MANAGER_H - -#include /**/ "ace/pre.h" - -#include "ace/config-all.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "ace/Log_Msg.h" -#include "ace/Basic_Types.h" - -// Forward declaration. -class ACE_Allocator; - -/** - * @class ACE_Map_Entry - * - * @brief An entry in the Map. - */ -template <class EXT_ID, class INT_ID> -class ACE_Map_Entry -{ -public: -# if ! defined (ACE_HAS_BROKEN_NOOP_DTORS) - /// We need this destructor to keep some compilers from complaining. - /// It's just a no-op, however. - ~ACE_Map_Entry (void); -# endif /* ! defined (ACE_HAS_BROKEN_NOOP_DTORS) */ - - /// Key used to look up an entry. - EXT_ID ext_id_; - - /// The contents of the entry itself. - INT_ID int_id_; - - /// Dump the state of an object. - void dump (void) const; - - /// Declare the dynamic allocation hooks. - ACE_ALLOC_HOOK_DECLARE; - - // = These are really private, but unfortunately template friends - // are not portable. - - /// Get next entry. - ACE_UINT32 next (void) const; - - /// Set next entry. - void next (ACE_UINT32 n); - - /// Get prev entry. - ACE_UINT32 prev (void) const; - - /// Set prev entry. - void prev (ACE_UINT32 p); - - /// Keeps track of the next entry. - ACE_UINT32 next_; - - /// Keeps track of the previous entry. - ACE_UINT32 prev_; - -#if defined (ACE_HAS_LAZY_MAP_MANAGER) - - /// Is this entry free? - int free_; - -#endif /* ACE_HAS_LAZY_MAP_MANAGER */ - -}; - -// Forward decl. -template <class EXT_ID, class INT_ID, class ACE_LOCK> -class ACE_Map_Iterator_Base; - -// Forward decl. -template <class EXT_ID, class INT_ID, class ACE_LOCK> -class ACE_Map_Const_Iterator_Base; - -// Forward decl. -template <class EXT_ID, class INT_ID, class ACE_LOCK> -class ACE_Map_Iterator; - -// Forward decl. -template <class EXT_ID, class INT_ID, class ACE_LOCK> -class ACE_Map_Const_Iterator; - -// Forward decl. -template <class EXT_ID, class INT_ID, class ACE_LOCK> -class ACE_Map_Reverse_Iterator; - -/** - * @class ACE_Map_Manager - * - * @brief Define a map abstraction that associates <EXT_ID>s with - * <INT_ID>s. - * - * The <EXT_ID> must support <operator==>. This constraint can - * be alleviated via template specialization, as shown in the - * $ACE_ROOT/tests/Conn_Test.cpp test. - * This class uses an <ACE_Allocator> to allocate memory. The - * user can make this a persistant class by providing an - * <ACE_Allocator> with a persistable memory pool. - * This implementation of a map uses an array, which is searched - * linearly. For more efficient searching you should use the - * <ACE_Hash_Map_Manager>. - */ -template <class EXT_ID, class INT_ID, class ACE_LOCK> -class ACE_Map_Manager -{ -public: - friend class ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>; - friend class ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>; - friend class ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>; - friend class ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK>; - friend class ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>; - - // = Traits. - typedef EXT_ID KEY; - typedef INT_ID VALUE; - typedef ACE_Map_Entry<EXT_ID, INT_ID> ENTRY; - typedef ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> ITERATOR; - typedef ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> CONST_ITERATOR; - typedef ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> REVERSE_ITERATOR; - - typedef ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> iterator; - typedef ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> const_iterator; - typedef ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> reverse_iterator; - - // = Initialization and termination methods. - /// Initialize a ACE_Map_Manager with the ACE_DEFAULT_MAP_SIZE. - ACE_Map_Manager (ACE_Allocator *alloc = 0); - - /// Initialize a ACE_Map_Manager with @a size entries. - ACE_Map_Manager (size_t size, - ACE_Allocator *alloc = 0); - - /// Initialize a ACE_Map_Manager with size @a length. - int open (size_t length = ACE_DEFAULT_MAP_SIZE, - ACE_Allocator *alloc = 0); - - /// Close down a ACE_Map_Manager and release dynamically allocated - /// resources. - int close (void); - - /// Close down a ACE_Map_Manager and release dynamically allocated - /// resources. - ~ACE_Map_Manager (void); - - /** - * Associate @a ext_id with @a int_id. If @a ext_id is already in the - * map then the ACE_Map_Entry is not changed. - * @retval 0 If a new entry is bound successfully. - * @retval 1 If an attempt is made to bind an existing entry. - * @retval -1 If failures occur. - */ - int bind (const EXT_ID &ext_id, - const INT_ID &int_id); - - /** - * Reassociate @a ext_id with @a int_id. If @a ext_id is not in the - * map then behaves just like bind(). Otherwise, store the old - * values of <ext_id> and <int_id> into the "out" parameters and - * rebind the new parameters. This is very useful if you need to - * have an atomic way of updating <Map_Entries> and you also need - * full control over memory allocation. - * @retval 0 If a new entry is bound successfully. - * @retval 1 If an existing entry was rebound. - * @retval -1 If failures occur. - */ - int rebind (const EXT_ID &ext_id, - const INT_ID &int_id, - EXT_ID &old_ext_id, - INT_ID &old_int_id); - - /** - * Reassociate @a ext_id with @a int_id. If <ext_id> is not in the - * map then behaves just like <bind>. Otherwise, store the old - * values of <int_id> into the "out" parameter and rebind the new - * parameters. - * @retval 0 If a new entry is bound successfully. - * @retval 1 If an existing entry was rebound. - * @retval -1 If failures occur. - */ - int rebind (const EXT_ID &ext_id, - const INT_ID &int_id, - INT_ID &old_int_id); - - /// Reassociate @a ext_id with @a int_id. Old values in the map are - /// ignored. - int rebind (const EXT_ID &ext_id, - const INT_ID &int_id); - - /** - * Associate <ext_id> with <int_id> if and only if <ext_id> is not - * in the map. If <ext_id> is already in the map then the <int_id> - * parameter is overwritten with the existing value in the map - * @retval 0 If a new entry is bound successfully. - * @retval 1 If an attempt is made to bind an existing entry. - * @retval -1 If failures occur. - */ - int trybind (const EXT_ID &ext_id, - INT_ID &int_id); - - /** - * Locate <ext_id> and pass out parameter via <int_id>. - * @retval 0 If found. - * @retval -1 If not found. - */ - int find (const EXT_ID &ext_id, - INT_ID &int_id) const; - - /// Returns 0 if the <ext_id> is in the mapping, otherwise -1. - int find (const EXT_ID &ext_id) const; - - /** - * Unbind (remove) the <ext_id> from the map. Don't return the - * <int_id> to the caller (this is useful for collections where the - * <int_id>s are *not* dynamically allocated...) Returns 0 if - * successful, else -1. - */ - int unbind (const EXT_ID &ext_id); - - /** - * Break any association of <ext_id>. Returns the value of <int_id> - * in case the caller needs to deallocate memory. Returns 0 if - * successful, else -1. - */ - int unbind (const EXT_ID &ext_id, - INT_ID &int_id); - - /** - * Unbind all entires. - */ - void unbind_all (void); - - /// Return the current size of the map. - size_t current_size (void) const; - - /// Return the total size of the map. - size_t total_size (void) const; - - /** - * Returns a reference to the underlying <ACE_LOCK>. This makes it - * possible to acquire the lock explicitly, which can be useful in - * some cases if you instantiate the <ACE_Atomic_Op> with an - * <ACE_Recursive_Mutex> or <ACE_Process_Mutex>, or if you need to - * guard the state of an iterator. NOTE: the right name would be - * <lock>, but HP/C++ will choke on that! - */ - ACE_LOCK &mutex (void); - - /// Dump the state of an object. - void dump (void) const; - - // = STL styled iterator factory functions. - - /// Return forward iterator. - ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> begin (void); - ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> end (void); - - /// Return reverse iterator. - ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> rbegin (void); - ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> rend (void); - - /// Declare the dynamic allocation hooks. - ACE_ALLOC_HOOK_DECLARE; - -protected: - - // = The following methods do the actual work. - - // These methods assume that the locks are held by the private - // methods. - - /// Performs the binding of <ext_id> to <int_id>. Must be called - /// with locks held. - int bind_i (const EXT_ID &ext_id, - const INT_ID &int_id); - - /// Bind an entry (without finding first). Must be called with locks - /// held. - int shared_bind (const EXT_ID &ext_id, - const INT_ID &int_id); - - /// Performs a rebinding of <ext_it> to <int_id>. Also, recovers old - /// values. Must be called with locks held. - int rebind_i (const EXT_ID &ext_id, - const INT_ID &int_id, - EXT_ID &old_ext_id, - INT_ID &old_int_id); - - /// Performs a rebinding of <ext_it> to <int_id>. Also, recovers old - /// values. Must be called with locks held. - int rebind_i (const EXT_ID &ext_id, - const INT_ID &int_id, - INT_ID &old_int_id); - - /// Performs a rebinding of <ext_it> to <int_id>. Must be called - /// with locks held. - int rebind_i (const EXT_ID &ext_id, - const INT_ID &int_id); - - /// Performs a conditional bind of <int_id> using <ext_id> as the - /// key. Must be called with locks held. - int trybind_i (const EXT_ID &ext_id, - INT_ID &int_id); - - /// Performs a find of <int_id> using <ext_id> as the key. Must be - /// called with locks held. - int find_i (const EXT_ID &ext_id, - INT_ID &int_id); - - /// Performs a find using <ext_id> as the key. Must be called with - /// locks held. - int find_and_return_index (const EXT_ID &ext_id, - ACE_UINT32 &slot); - - /// Performs an unbind of <int_id> using <ext_id> as the key. Must - /// be called with locks held. - int unbind_i (const EXT_ID &ext_id, - INT_ID &int_id); - - /// Performs an unbind using <ext_id> as the key. Must be called - /// with locks held. - int unbind_i (const EXT_ID &ext_id); - - /// Performs an unbind using <ext_id> as the key. Must be called - /// with locks held. - int unbind_and_return_index (const EXT_ID &ext_id, - ACE_UINT32 &slot); - - /// Unbind <slot>. - void unbind_slot (ACE_UINT32 slot); - - /// Resize the map. Must be called with locks held. - int resize_i (ACE_UINT32 size); - - /// Close down a <Map_Manager>. Must be called with locks held. - int close_i (void); - - /// Returns 1 if <id1> == <id2>, else 0. This is defined as a - /// separate method to facilitate template specialization. - int equal (const EXT_ID &id1, const EXT_ID &id2); - - /// This function returns the new size of the Map Manager. This - /// function is called when we run out of room and need to resize. - ACE_UINT32 new_size (void); - - /// Explicitly call the destructors and free up the - /// <search_structure_>. - void free_search_structure (void); - - /// Id of the free list sentinel. - ACE_UINT32 free_list_id (void) const; - - /// Id of the occupied list sentinel. - ACE_UINT32 occupied_list_id (void) const; - - /// Finds the next free slot. - int next_free (ACE_UINT32 &slot); - - /// Move from free list to occupied list. - void move_from_free_list_to_occupied_list (ACE_UINT32 slot); - - /// Move from occupied list to free list. - void move_from_occupied_list_to_free_list (ACE_UINT32 slot); - -#if defined (ACE_HAS_LAZY_MAP_MANAGER) - - /** - * In the case of lazy map managers, the movement of free slots from - * the occupied list to the free list is delayed until we run out of - * free slots in the free list. This function goes through the - * entire occupied list, moving free slots to the free list. - */ - void move_all_free_slots_from_occupied_list (void); - -#endif /* ACE_HAS_LAZY_MAP_MANAGER */ - - /// Move helper. - void shared_move (ACE_UINT32 slot, - ACE_Map_Entry<EXT_ID, INT_ID> ¤t_list, - ACE_UINT32 current_list_id, - ACE_Map_Entry<EXT_ID, INT_ID> &new_list, - ACE_UINT32 new_list_id); - - /// Pointer to a memory allocator. - ACE_Allocator *allocator_; - - /// Synchronization variable for the MT_SAFE <ACE_Map_Manager>. - ACE_LOCK lock_; - - /// Implement the Map as a resizeable array of <ACE_Map_Entry>. - ACE_Map_Entry<EXT_ID, INT_ID> *search_structure_; - - /// Total number of elements in this->search_structure_. - ACE_UINT32 total_size_; - - /// Current size of the map. - ACE_UINT32 cur_size_; - - /// Free list. - ACE_Map_Entry<EXT_ID, INT_ID> free_list_; - - /// Occupied list. - ACE_Map_Entry<EXT_ID, INT_ID> occupied_list_; - - enum - { - /// Grow map exponentially up to 64K - MAX_EXPONENTIAL = 64 * 1024, - - /// Afterwards grow in chunks of 32K - LINEAR_INCREASE = 32 * 1024 - }; - -private: - // = Disallow these operations. - ACE_UNIMPLEMENTED_FUNC (void operator= (const ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &)) - ACE_UNIMPLEMENTED_FUNC (ACE_Map_Manager (const ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &)) -}; - -/** - * @class ACE_Map_Iterator_Base - * - * @brief Iterator for the ACE_Map_Manager. - * - * This class factors out common code from its templatized - * subclasses. - */ -template <class EXT_ID, class INT_ID, class ACE_LOCK> -class ACE_Map_Iterator_Base -{ -public: - // = Initialization method. - /// Contructor. If head != 0, the iterator constructed is positioned - /// at the head of the map, it is positioned at the end otherwise. - ACE_Map_Iterator_Base (ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> &mm); - - // = Iteration methods. - - /// Pass back the next <entry> that hasn't been seen in the Set. - /// Returns 0 when all items have been seen, else 1. - int next (ACE_Map_Entry<EXT_ID, INT_ID> *&next_entry) const; - - /// Returns 1 when all items have been seen, else 0. - int done (void) const; - - /// Returns a reference to the interal element <this> is pointing to. - ACE_Map_Entry<EXT_ID, INT_ID>& operator* (void) const; - - /// Returns reference the Map_Manager that is being iterated - /// over. - ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>& map (void); - - /// Check if two iterators point to the same position - int operator== (const ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &) const; - int operator!= (const ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &) const; - - /// Declare the dynamic allocation hooks. - ACE_ALLOC_HOOK_DECLARE; - -protected: - /// Move forward by one element in the set. Returns 0 when there's - /// no more item in the set after the current items, else 1. - int forward_i (void); - - /// Move backware by one element in the set. Returns 0 when there's - /// no more item in the set before the current item, else 1. - int reverse_i (void); - - /// Dump the state of an object. - void dump_i (void) const; - - /// Map we are iterating over. - ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> *map_man_; - - /// Keeps track of how far we've advanced... - ACE_UINT32 next_; -}; - -/** - * @class ACE_Map_Const_Iterator_Base - * - * @brief Const iterator for the ACE_Map_Manager. - * - * This class factors out common code from its templatized - * subclasses. - */ -template <class EXT_ID, class INT_ID, class ACE_LOCK> -class ACE_Map_Const_Iterator_Base -{ -public: - // = Initialization method. - /// Contructor. If head != 0, the iterator constructed is positioned - /// at the head of the map, it is positioned at the end otherwise. - ACE_Map_Const_Iterator_Base (const ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> &mm); - - // = Iteration methods. - - /// Pass back the next <entry> that hasn't been seen in the Set. - /// Returns 0 when all items have been seen, else 1. - int next (ACE_Map_Entry<EXT_ID, INT_ID> *&next_entry) const; - - /// Returns 1 when all items have been seen, else 0. - int done (void) const; - - /// Returns a reference to the interal element <this> is pointing to. - ACE_Map_Entry<EXT_ID, INT_ID>& operator* (void) const; - - /// Returns reference the Map_Manager that is being iterated - /// over. - const ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK>& map (void) const; - - /// Check if two iterators point to the same position - int operator== (const ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &) const; - int operator!= (const ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> &) const; - - /// Declare the dynamic allocation hooks. - ACE_ALLOC_HOOK_DECLARE; - -protected: - /// Move forward by one element in the set. Returns 0 when there's - /// no more item in the set after the current items, else 1. - int forward_i (void); - - /// Move backware by one element in the set. Returns 0 when there's - /// no more item in the set before the current item, else 1. - int reverse_i (void); - - /// Dump the state of an object. - void dump_i (void) const; - - /// Map we are iterating over. - const ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> *map_man_; - - /// Keeps track of how far we've advanced... - ACE_UINT32 next_; -}; - -/** - * @class ACE_Map_Iterator - * - * @brief Forward iterator for the ACE_Map_Manager. - * - * This class does not perform any internal locking of the - * <ACE_Map_Manager> it is iterating upon since locking is - * inherently inefficient and/or error-prone within an STL-style - * iterator. If you require locking, you can explicitly use an - * <ACE_Guard> or <ACE_Read_Guard> on the <ACE_Map_Manager>'s - * internal lock, which is accessible via its <mutex> method. - */ -template <class EXT_ID, class INT_ID, class ACE_LOCK> -class ACE_Map_Iterator : public ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> -{ -public: - // = Initialization method. - ACE_Map_Iterator (ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> &mm, - int pass_end = 0); - - // = Iteration methods. - - /// Move forward by one element in the set. Returns 0 when all the - /// items in the set have been seen, else 1. - int advance (void); - - /// Dump the state of an object. - void dump (void) const; - - // = STL styled iteration, compare, and reference functions. - - /// Prefix advance. - ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator++ (void); - - /// Postfix advance. - ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator++ (int); - - /// Prefix reverse. - ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void); - - /// Postfix reverse. - ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int); - - /// Declare the dynamic allocation hooks. - ACE_ALLOC_HOOK_DECLARE; -}; - -/** - * @class ACE_Map_Const_Iterator - * - * @brief Forward const iterator for the ACE_Map_Manager. - * - * This class does not perform any internal locking of the - * <ACE_Map_Manager> it is iterating upon since locking is - * inherently inefficient and/or error-prone within an STL-style - * iterator. If you require locking, you can explicitly use an - * <ACE_Guard> or <ACE_Read_Guard> on the <ACE_Map_Manager>'s - * internal lock, which is accessible via its <mutex> method. - */ -template <class EXT_ID, class INT_ID, class ACE_LOCK> -class ACE_Map_Const_Iterator : public ACE_Map_Const_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> -{ -public: - // = Initialization method. - ACE_Map_Const_Iterator (const ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> &mm, - int pass_end = 0); - - // = Iteration methods. - - /// Move forward by one element in the set. Returns 0 when all the - /// items in the set have been seen, else 1. - int advance (void); - - /// Dump the state of an object. - void dump (void) const; - - // = STL styled iteration, compare, and reference functions. - - /// Prefix advance. - ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator++ (void); - - /// Postfix advance. - ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator++ (int); - - /// Prefix reverse. - ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void); - - /// Postfix reverse. - ACE_Map_Const_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int); - - /// Declare the dynamic allocation hooks. - ACE_ALLOC_HOOK_DECLARE; -}; - -/** - * @class ACE_Map_Reverse_Iterator - * - * @brief Reverse Iterator for the <ACE_Map_Manager>. - * - * This class does not perform any internal locking of the - * <ACE_Map_Manager> it is iterating upon since locking is - * inherently inefficient and/or error-prone within an STL-style - * iterator. If you require locking, you can explicitly use an - * <ACE_Guard> or <ACE_Read_Guard> on the <ACE_Map_Manager>'s - * internal lock, which is accessible via its <mutex> method. - */ -template <class EXT_ID, class INT_ID, class ACE_LOCK> -class ACE_Map_Reverse_Iterator : public ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK> -{ -public: - // = Initialization method. - ACE_Map_Reverse_Iterator (ACE_Map_Manager <EXT_ID, INT_ID, ACE_LOCK> &mm, - int pass_end = 0); - - // = Iteration methods. - - /// Move forward by one element in the set. Returns 0 when all the - /// items in the set have been seen, else 1. - int advance (void); - - /// Dump the state of an object. - void dump (void) const; - - // = STL styled iteration, compare, and reference functions. - - /// Prefix reverse. - ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator++ (void); - - /// Postfix reverse. - ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator++ (int); - - /// Prefix advance. - ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void); - - /// Postfix advance. - ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int); - - /// Declare the dynamic allocation hooks. - ACE_ALLOC_HOOK_DECLARE; -}; - -#if defined (__ACE_INLINE__) -#include "ace/Map_Manager.i" -#endif /* __ACE_INLINE__ */ - -#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) -#include "ace/Map_Manager.cpp" -#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ - -#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA) -#pragma implementation ("Map_Manager.cpp") -#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ - -#include /**/ "ace/post.h" - -#endif /* ACE_MAP_MANAGER_H */ |