Permalink
Switch branches/tags
v0_8_3 v0_8_2 v0_8_1 start smcq030515 rt-dance-branch-point rel-1_1_6 refactor-stage_6 presequpdate2 presendfile preondemand preiiopopt precorbae prearray preAnyRefactor pre_1_4_5 pre_recursive_typecodes pre_reactor_deadlock pre_pp_endpoint pre_pluggable_av_merge pre_orbsvcs_split pre_oci_asynch_imr_trunk pre_oci_asynch_imr_merge pre_non_tss_orb_core pre_new_load_balancer_01 pre_multiple_profile_server pre_merge_886 pre_merge_non_interpretive pre_memory_leak_fixes pre_mda_cleanup pre_log_msg_dep_break pre_local_policies pre_fix_bug132 pre_dynamic_any pre_doxygen_ace pre_bug_1269 pre_beta_atd_20020715 pre_bala_pmb_optimize pre_avsvc_split pre_ami_phase3_merge pre_ami_phase2_merge pre_ami_phase1_merge pre_TAO_0_2 pre_OBV_patch pre-typecode-rewrite-merge pre-subset pre-stream-code-reorganization pre-refactor pre-refactor-stage3 pre-refactor-stage2 pre-new-any pre-dyn-corba pre-corba-env-clean-merge pre-connect-strategy pre-SHM pre-PI2 pre-LocalObject pre-IDL3 pre-CIAO-1 pre-CIAO-0 pre-CCM-Core pre-AX0 post_recursive_typecodes post_poa_merge post_pluggable_av_merge post_mt_posix_proactor post_log_msg_dep_break post_bug_1269 post-poa-skeleton-refactor post-corba-env-clean-merge post-connect-strategy pos_pp_endpoint pos_orbsvcs_split pos_non_tss_orb_core pos_multiple_profile_server pos_merge_886 pos_merge_non_interpretive pos_local_policies pos_fix_bug_1222 pos_fix_bug132 pos_dynamic_any pos_doxygen_ace pos_avsvc_split pos_ami_phase3_merge pos_ami_phase2_merge pos_ami_phase1_merge pos_OBV_patch poa_start poa_real_end poa_end pns_start pns_branch_start pnotify_start pmb_integration_start pmb_integration_mike_start pmb_integration_greedyread pmb_branch_start pmb_branch_ocitao_patch_1_generation pmb_branch_mainline_mergeout_1 pluggable_testing
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
229 lines (186 sloc) 5.68 KB
/* -*- C++ -*- */
//=============================================================================
/**
* @file Auto_Ptr.h
*
* @author Doug Schmidt <schmidt@uci.edu>
* @author Irfan Pyarali <irfan@cs.wustl.edu>
* @author Jack Reeves <jack@fx.com>
* @author Dr. Harald M. Mueller <mueller@garwein.hai.siemens.co.at>
*/
//=============================================================================
#ifndef ACE_AUTO_PTR_H
#define ACE_AUTO_PTR_H
#include /**/ "ace/pre.h"
#include /**/ "ace/config-all.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
#if defined (_MSC_VER)
// Suppress warning e.g. "return type for
// 'ACE_Auto_Array_Pointer<type>::operator ->' is 'type *' (i.e., not a UDT
// or reference to a UDT. Will produce errors if applied using infix
// notation)"
# pragma warning(push)
# pragma warning(disable: 4284)
#endif /* _MSC_VER */
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
/**
* @class ACE_Auto_Basic_Ptr
*
* @brief Implements the draft C++ standard auto_ptr abstraction.
* This class allows one to work on non-object (basic) types
*/
template <typename X>
class ACE_Auto_Basic_Ptr
{
public:
typedef X element_type;
// = Initialization and termination methods
explicit ACE_Auto_Basic_Ptr (X * p = 0) : p_ (p) {}
ACE_Auto_Basic_Ptr (ACE_Auto_Basic_Ptr<X> & ap);
ACE_Auto_Basic_Ptr<X> &operator= (ACE_Auto_Basic_Ptr<X> & rhs);
~ACE_Auto_Basic_Ptr (void);
// = Accessor methods.
X &operator *() const;
X *get (void) const;
X *release (void);
void reset (X * p = 0);
/// Dump the state of an object.
void dump (void) const;
/// Declare the dynamic allocation hooks.
ACE_ALLOC_HOOK_DECLARE;
protected:
X *p_;
};
ACE_END_VERSIONED_NAMESPACE_DECL
#if !defined (ACE_LACKS_AUTO_PTR) && \
defined (ACE_HAS_STANDARD_CPP_LIBRARY) && \
(ACE_HAS_STANDARD_CPP_LIBRARY != 0)
#include <memory>
#if defined (ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB) && \
(ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB != 0)
#if !defined (ACE_HAS_CPP17)
using std::auto_ptr;
#endif /* !ACE_HAS_CPP17 */
#endif /* ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB */
#else /* ACE_HAS_STANDARD_CPP_LIBRARY */
/**
* @class auto_ptr
*
* @brief Implements the draft C++ standard auto_ptr abstraction.
*/
template <typename X>
class auto_ptr : public ACE_Auto_Basic_Ptr<X>
{
public:
typedef X element_type;
// = Initialization and termination methods
explicit auto_ptr (X * p = 0) : ACE_Auto_Basic_Ptr<X> (p) {}
auto_ptr (auto_ptr<X> & ap) : ACE_Auto_Basic_Ptr<X> (ap.release ()) {}
X *operator-> () const;
};
#endif /* ACE_HAS_STANDARD_CPP_LIBRARY */
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
/**
* @brief Implements the draft C++ standard auto_ptr abstraction.
* This version can be used instead of auto_ptr<T>
*/
template <typename X>
class ACE_Auto_Ptr : public ACE_Auto_Basic_Ptr <X>
{
public:
typedef X element_type;
// = Initialization and termination methods
explicit ACE_Auto_Ptr (X * p = 0) : ACE_Auto_Basic_Ptr<X> (p) {}
X *operator-> () const;
};
/**
* @class ACE_Auto_Basic_Array_Ptr
*
* @brief Implements an extension to the draft C++ standard auto_ptr
* abstraction. This class allows one to work on non-object
* (basic) types that must be treated as an array, e.g.,
* deallocated via "delete [] foo".
*/
template<typename X>
class ACE_Auto_Basic_Array_Ptr
{
public:
typedef X element_type;
// = Initialization and termination methods.
explicit ACE_Auto_Basic_Array_Ptr (X * p = 0) : p_ (p) {}
ACE_Auto_Basic_Array_Ptr (ACE_Auto_Basic_Array_Ptr<X> & ap);
ACE_Auto_Basic_Array_Ptr<X> &operator= (ACE_Auto_Basic_Array_Ptr<X> & rhs);
~ACE_Auto_Basic_Array_Ptr (void);
// = Accessor methods.
X & operator* () const;
X & operator[] (int i) const;
X * get (void) const;
X * release (void);
void reset (X * p = 0);
/// Dump the state of an object.
void dump (void) const;
/// Declare the dynamic allocation hooks.
ACE_ALLOC_HOOK_DECLARE;
protected:
X * p_;
};
/**
* @class ACE_Auto_Array_Ptr
*
* @brief Implements an extension to the draft C++ standard auto_ptr
* abstraction.
*/
template<typename X>
class ACE_Auto_Array_Ptr : public ACE_Auto_Basic_Array_Ptr<X>
{
public:
typedef X element_type;
// = Initialization and termination methods.
explicit ACE_Auto_Array_Ptr (X *p = 0)
: ACE_Auto_Basic_Array_Ptr<X> (p) {}
X *operator-> () const;
};
/**
* @brief Reset given @c auto_ptr element to new element.
*
* Some platforms have an older version of auto_ptr support, which
* lacks reset, and cannot be disabled easily. Portability to these
* platforms requires use of this function template. This function
* template also works for the @c ACE_Auto_{Basic_}Array_Ptr class
* template, as well.
*/
template<typename AUTO_PTR_TYPE, typename PTR_TYPE>
inline void
ACE_auto_ptr_reset (AUTO_PTR_TYPE & ap,
PTR_TYPE * p)
{
#if defined (ACE_AUTO_PTR_LACKS_RESET)
// Allow compiler to adjust pointer to potential base class pointer
// of element type found in auto_ptr.
typename AUTO_PTR_TYPE::element_type * const tp = p;
if (tp != ap.get ())
{
ap = AUTO_PTR_TYPE (tp);
}
#else
ap.reset (p);
#endif /* ACE_AUTO_PTR_LACKS_RESET */
}
ACE_END_VERSIONED_NAMESPACE_DECL
#if defined (__ACE_INLINE__)
#include "ace/Auto_Ptr.inl"
#endif /* __ACE_INLINE__ */
#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
#include "ace/Auto_Ptr.cpp"
#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
#pragma implementation ("Auto_Ptr.cpp")
#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
#if defined (_MSC_VER)
// Restore the warning state to what it was before entry.
# pragma warning(pop)
#endif /* _MSC_VER */
#include /**/ "ace/post.h"
#endif /* ACE_AUTO_PTR_H */