diff options
author | levine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1997-07-29 03:31:08 +0000 |
---|---|---|
committer | levine <levine@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1997-07-29 03:31:08 +0000 |
commit | 9d8218d215479e86eb34278116a3fea4869d1784 (patch) | |
tree | a5946f0b8beef753e93a7a9247b0a3e02ce8039e /ace | |
parent | 25aa954eea3b2b057b6580869eb802f29263c51f (diff) | |
download | ATCD-9d8218d215479e86eb34278116a3fea4869d1784.tar.gz |
(delete_at_exit,delete_array_at_exit): made these (inline) static functions, with return values.
Diffstat (limited to 'ace')
-rw-r--r-- | ace/Object_Manager.cpp | 53 | ||||
-rw-r--r-- | ace/Object_Manager.h | 27 | ||||
-rw-r--r-- | ace/Object_Manager.i | 16 |
3 files changed, 82 insertions, 14 deletions
diff --git a/ace/Object_Manager.cpp b/ace/Object_Manager.cpp index a452fd3bc67..850875dfb1b 100644 --- a/ace/Object_Manager.cpp +++ b/ace/Object_Manager.cpp @@ -5,15 +5,19 @@ #include "ace/Object_Manager.h" #include "ace/Service_Repository.h" +#if !defined (__ACE_INLINE__) +#include "ace/Object_Manager.i" +#endif /* __ACE_INLINE__ */ + ACE_Object_Manager *ACE_Object_Manager::instance_ = 0; + ACE_Object_Manager::ACE_Object_Manager () : registered_objects_ (), registered_arrays_ () { } - ACE_Object_Manager::~ACE_Object_Manager () { void *p; @@ -35,7 +39,6 @@ ACE_Object_Manager::~ACE_Object_Manager () ACE_Service_Config::close (); } - ACE_Object_Manager * ACE_Object_Manager::instance () { @@ -50,18 +53,48 @@ ACE_Object_Manager::instance () return instance_; } - -void -ACE_Object_Manager::delete_at_exit (void *object) +int +ACE_Object_Manager::delete_at_exit_ (void *object) { - registered_objects_.enqueue_tail (object); -} + // Check for already in queue, and return 1 if so. + ACE_Unbounded_Queue_Iterator<void *> i (registered_objects_); + void **obj; + + while (i.next (obj)) + { + i.advance (); + if (obj == object) + { + // The object has already been registered. + return 1; + } + } + + // Returns -1 if unable to allocate storage. + return registered_objects_.enqueue_tail (object); +} -void -ACE_Object_Manager::delete_array_at_exit (void *array) +int +ACE_Object_Manager::delete_array_at_exit_ (void *array) { - registered_arrays_.enqueue_tail (array); + // Check for already in queue, and return 1 if so. + ACE_Unbounded_Queue_Iterator<void *> i (registered_arrays_); + void **obj; + + while (i.next (obj)) + { + i.advance (); + + if (obj == array) + { + // The array has already been registered. + return 1; + } + } + + // Returns -1 if unable to allocate storage. + return registered_arrays_.enqueue_tail (array); } diff --git a/ace/Object_Manager.h b/ace/Object_Manager.h index 9352123ee99..099e73a733e 100644 --- a/ace/Object_Manager.h +++ b/ace/Object_Manager.h @@ -35,18 +35,25 @@ class ACE_Export ACE_Object_Manager // own cleanup. // It would be worth adding a capability to do the shutdown prior to // static object destruction, e.g., via an at_exit () call. Without - // that capability, on VxWorks, for example, the program must be unloaded - // for this to work. + // that capability, on VxWorks, for example, the program can be unloaded + // for this to work. (On VxWorks, alternatively, the explicity OS calls + // to call all static destructors and constructors could be used.) { public: static ACE_Object_Manager *instance (); // Accessor to singleton instance. - void delete_at_exit (void *); + static int delete_at_exit (void *object); // Register an object for deletion at program termination. + // Returns 0 on success, non-zero on failure: -1 if virtual + // memory is exhausted or 1 if the object had already been + // registered. - void delete_array_at_exit (void *); + static int delete_array_at_exit (void *array); // Register an array for deletion at program termination. + // Returns 0 on success, non-zero on failure: -1 if virtual + // memory is exhausted or 1 if the object had already been + // registered. private: static ACE_Object_Manager *instance_; @@ -57,7 +64,19 @@ private: ACE_Object_Manager (); ~ACE_Object_Manager (); + int delete_at_exit_ (void *); + // Register an object for deletion at program termination. + // See description of static version above for return values. + + int delete_array_at_exit_ (void *); + // Register an array for deletion at program termination. + // See description of static version above for return values. + friend class ACE_Object_Manager_Destroyer; }; +#if defined (__ACE_INLINE__) +#include "ace/Object_Manager.i" +#endif /* __ACE_INLINE__ */ + #endif /* ACE_OBJECT_MANAGER_H */ diff --git a/ace/Object_Manager.i b/ace/Object_Manager.i new file mode 100644 index 00000000000..de18c702d31 --- /dev/null +++ b/ace/Object_Manager.i @@ -0,0 +1,16 @@ +/* -*- C++ -*- */ +// $Id$ + +ACE_INLINE +int +ACE_Object_Manager::delete_at_exit (void *object) +{ + return ACE_Object_Manager::instance ()->delete_at_exit_ (object); +} + +ACE_INLINE +int +ACE_Object_Manager::delete_array_at_exit (void *array) +{ + return ACE_Object_Manager::instance ()->delete_array_at_exit_ (array); +} |