| Index: third_party/smartany/auto_any.h
|
| diff --git a/third_party/smartany/auto_any.h b/third_party/smartany/auto_any.h
|
| deleted file mode 100644
|
| index 7b757267cb713f72ea8d10d4c6d86ef886eeed0d..0000000000000000000000000000000000000000
|
| --- a/third_party/smartany/auto_any.h
|
| +++ /dev/null
|
| @@ -1,315 +0,0 @@
|
| -//+---------------------------------------------------------------------------
|
| -//
|
| -// Copyright ( C ) Microsoft, 2002.
|
| -//
|
| -// File: auto_any.h
|
| -//
|
| -// Contents: automatic resource management, a-la std::auto_ptr
|
| -//
|
| -// Classes: auto_any<> and various typedefs
|
| -//
|
| -// Functions: get
|
| -// reset
|
| -// release
|
| -// valid
|
| -// address
|
| -//
|
| -// Author: Eric Niebler ( ericne@microsoft.com )
|
| -//
|
| -//----------------------------------------------------------------------------
|
| -
|
| -#ifndef AUTO_ANY
|
| -#define AUTO_ANY
|
| -#include <cassert>
|
| -#include "smart_any_fwd.h"
|
| -
|
| -#pragma warning(push)
|
| -
|
| -// 4284 warning for operator-> returning non-pointer;
|
| -// compiler issues it even if -> is not used for the specific instance
|
| -#pragma warning(disable: 4284)
|
| -
|
| -namespace detail
|
| -{
|
| - // friend function definitions go in auto_any_helper
|
| - template<typename T,class close_policy,class invalid_value,int unique>
|
| - struct auto_any_helper;
|
| -}
|
| -
|
| -// proxy reference for auto_any copying
|
| -template<typename T,class close_policy,class invalid_value,int unique>
|
| -struct auto_any_ref
|
| -{
|
| - // construct from compatible auto_any
|
| - auto_any_ref( auto_any<T,close_policy,invalid_value,unique> & that )
|
| - : m_that( that )
|
| - {
|
| - }
|
| -
|
| - // reference to constructor argument
|
| - auto_any<T,close_policy,invalid_value,unique> & m_that;
|
| -
|
| -private:
|
| - auto_any_ref * operator=( auto_any_ref const & );
|
| -};
|
| -
|
| -// wrap a resource to enforce strict ownership and ensure proper cleanup
|
| -template<typename T,class close_policy,class invalid_value,int unique>
|
| -class auto_any
|
| -{
|
| - typedef detail::safe_types<T,close_policy> safe_types;
|
| -
|
| - // disallow comparison of auto_any's
|
| - bool operator==( detail::safe_bool ) const;
|
| - bool operator!=( detail::safe_bool ) const;
|
| -
|
| -public:
|
| - typedef typename detail::holder<T>::type element_type;
|
| - typedef close_policy close_policy_type;
|
| - typedef typename safe_types::pointer_type pointer_type;
|
| - typedef typename safe_types::reference_type reference_type;
|
| -
|
| - // Fix-up the invalid_value type on older compilers
|
| - typedef typename detail::fixup_invalid_value<invalid_value>::
|
| - template rebind<T>::type invalid_value_type;
|
| -
|
| - friend struct detail::auto_any_helper<T,close_policy,invalid_value,unique>;
|
| -
|
| - // construct from object pointer
|
| - explicit auto_any( T t = invalid_value_type() )
|
| - : m_t( t )
|
| - {
|
| - }
|
| -
|
| - // construct by assuming pointer from right auto_any
|
| - auto_any( auto_any<T,close_policy,invalid_value,unique> & right )
|
| - : m_t( release( right ) )
|
| - {
|
| - }
|
| -
|
| - // construct by assuming pointer from right auto_any_ref
|
| - auto_any( auto_any_ref<T,close_policy,invalid_value,unique> right )
|
| - : m_t( release( right.m_that ) )
|
| - {
|
| - }
|
| -
|
| - // convert to compatible auto_any_ref
|
| - operator auto_any_ref<T,close_policy,invalid_value,unique>()
|
| - {
|
| - return auto_any_ref<T,close_policy,invalid_value,unique>( *this );
|
| - }
|
| -
|
| - // assign compatible right
|
| - auto_any<T,close_policy,invalid_value,unique> & operator=(
|
| - auto_any<T,close_policy,invalid_value,unique> & right )
|
| - {
|
| - reset( *this, release( right ) );
|
| - return *this;
|
| - }
|
| -
|
| - // assign compatible right.ref
|
| - auto_any<T,close_policy,invalid_value,unique> & operator=(
|
| - auto_any_ref<T,close_policy,invalid_value,unique> & right )
|
| - {
|
| - reset( *this, release( right.m_that ) );
|
| - return *this;
|
| - }
|
| -
|
| - // destroy the object
|
| - ~auto_any()
|
| - {
|
| - if( valid() )
|
| - {
|
| - close_policy::close( m_t );
|
| - }
|
| - }
|
| -
|
| - // return pointer to class object (assume pointer)
|
| - pointer_type operator->() const
|
| - {
|
| - #ifdef SMART_ANY_PTS
|
| - // You better not be applying operator-> to a handle!
|
| - static detail::static_assert<!detail::is_handle<T>::value> const cannot_dereference_a_handle;
|
| - #endif
|
| - assert( valid() );
|
| - return safe_types::to_pointer( m_t );
|
| - }
|
| -
|
| - // for use when auto_any appears in a conditional
|
| - operator detail::safe_bool() const
|
| - {
|
| - return valid() ? detail::safe_true : detail::safe_false;
|
| - }
|
| -
|
| - // for use when auto_any appears in a conditional
|
| - bool operator!() const
|
| - {
|
| - return ! valid();
|
| - }
|
| -
|
| - #ifdef SMART_ANY_PTS
|
| - // if this auto_any is managing an array, we can use operator[] to index it
|
| - typename detail::deref<T>::type operator[]( int i ) const
|
| - {
|
| - static detail::static_assert<!detail::is_handle<T>::value> const cannot_dereference_a_handle;
|
| - static detail::static_assert<!detail::is_delete<close_policy>::value> const accessed_like_an_array_but_not_deleted_like_an_array;
|
| - assert( valid() );
|
| - return m_t[ i ];
|
| - }
|
| -
|
| - // unary operator* lets you write code like:
|
| - // auto_any<foo*,close_delete> pfoo( new foo );
|
| - // foo & f = *pfoo;
|
| - reference_type operator*() const
|
| - {
|
| - static detail::static_assert<!detail::is_handle<T>::value> const cannot_dereference_a_handle;
|
| - assert( valid() );
|
| - return safe_types::to_reference( m_t );
|
| - }
|
| - #endif
|
| -
|
| -private:
|
| -
|
| - bool valid() const
|
| - {
|
| - // see if the managed resource is in the invalid state.
|
| - return m_t != static_cast<T>( invalid_value_type() );
|
| - }
|
| -
|
| - // the wrapped object
|
| - element_type m_t;
|
| -};
|
| -
|
| -namespace detail
|
| -{
|
| - // friend function definitions go in auto_any_helper
|
| - template<typename T,class close_policy,class invalid_value,int unique>
|
| - struct auto_any_helper
|
| - {
|
| - // return wrapped pointer
|
| - static T get( auto_any<T,close_policy,invalid_value,unique> const & t )
|
| - {
|
| - return t.m_t;
|
| - }
|
| -
|
| - // return wrapped pointer and give up ownership
|
| - static T release( auto_any<T,close_policy,invalid_value,unique> & t )
|
| - {
|
| - // Fix-up the invalid_value type on older compilers
|
| - typedef typename detail::fixup_invalid_value<invalid_value>::
|
| - template rebind<T>::type invalid_value_type;
|
| -
|
| - T tmpT = t.m_t;
|
| - t.m_t = static_cast<T>( invalid_value_type() );
|
| - return tmpT;
|
| - }
|
| -
|
| - // destroy designated object and store new pointer
|
| - static void reset( auto_any<T,close_policy,invalid_value,unique> & t, T newT )
|
| - {
|
| - if( t.m_t != newT )
|
| - {
|
| - if( t.valid() )
|
| - {
|
| - close_policy::close( t.m_t );
|
| - }
|
| - t.m_t = newT;
|
| - }
|
| - }
|
| -
|
| - typedef typename auto_any<T,close_policy,invalid_value,unique>::element_type element_type;
|
| -
|
| - // return the address of the wrapped pointer
|
| - static element_type* address( auto_any<T,close_policy,invalid_value,unique> & t )
|
| - {
|
| - // check to make sure the wrapped object is in the invalid state
|
| - assert( !t.valid() );
|
| - return address_of( t.m_t );
|
| - }
|
| - };
|
| -}
|
| -
|
| -// return wrapped resource
|
| -template<typename T,class close_policy,class invalid_value,int unique>
|
| -inline T get( auto_any<T,close_policy,invalid_value,unique> const & t )
|
| -{
|
| - return detail::auto_any_helper<T,close_policy,invalid_value,unique>::get( t );
|
| -}
|
| -
|
| -// return true if the auto_any contains a currently valid resource
|
| -template<typename T,class close_policy,class invalid_value,int unique>
|
| -inline bool valid( auto_any<T,close_policy,invalid_value,unique> const & t )
|
| -{
|
| - return t;
|
| -}
|
| -
|
| -// return wrapped resource and give up ownership
|
| -template<typename T,class close_policy,class invalid_value,int unique>
|
| -inline T release( auto_any<T,close_policy,invalid_value,unique> & t )
|
| -{
|
| - return detail::auto_any_helper<T,close_policy,invalid_value,unique>::release( t );
|
| -}
|
| -
|
| -// destroy designated object and store new resource
|
| -template<typename T,class close_policy,class invalid_value,int unique>
|
| -inline void reset( auto_any<T,close_policy,invalid_value,unique> & t )
|
| -{
|
| - typedef typename detail::fixup_invalid_value<invalid_value>::
|
| - template rebind<T>::type invalid_value_type;
|
| - detail::auto_any_helper<T,close_policy,invalid_value,unique>::reset( t, invalid_value_type() );
|
| -}
|
| -
|
| -// destroy designated object and store new resource
|
| -template<typename T,class close_policy,class invalid_value,int unique,typename U>
|
| -inline void reset( auto_any<T,close_policy,invalid_value,unique> & t, U newT )
|
| -{
|
| - detail::auto_any_helper<T,close_policy,invalid_value,unique>::reset( t, newT );
|
| -}
|
| -
|
| -// swap the contents of two shared_any objects
|
| -template<typename T,class close_policy,class invalid_value,int unique>
|
| -void swap( auto_any<T,close_policy,invalid_value,unique> & left,
|
| - auto_any<T,close_policy,invalid_value,unique> & right )
|
| -{
|
| - auto_any<T,close_policy,invalid_value,unique> tmp( left );
|
| - left = right;
|
| - right = tmp;
|
| -}
|
| -
|
| -// return the address of the wrapped resource
|
| -// WARNING: this will assert if the value of the resource is
|
| -// anything other than invalid_value.
|
| -template<typename T,class close_policy,class invalid_value,int unique>
|
| -inline typename auto_any<T,close_policy,invalid_value,unique>::element_type*
|
| - address( auto_any<T,close_policy,invalid_value,unique> & t )
|
| -{
|
| - return detail::auto_any_helper<T,close_policy,invalid_value,unique>::address( t );
|
| -}
|
| -
|
| -#pragma warning(pop)
|
| -
|
| -#endif
|
| -
|
| -// This causes the auto_* typedefs to be defined
|
| -DECLARE_SMART_ANY_TYPEDEFS(auto)
|
| -
|
| -#if defined(_OBJBASE_H_) & !defined(AUTO_ANY_CO_INIT)
|
| -# define AUTO_ANY_CO_INIT
|
| - typedef auto_any<HRESULT,close_co,co_not_init> auto_co_close;
|
| -
|
| - // Helper class for balancing calls to CoInitialize and CoUninitialize
|
| - struct auto_co_init
|
| - {
|
| - explicit auto_co_init( DWORD dwCoInit = COINIT_APARTMENTTHREADED )
|
| - : m_hr( smart_co_init_helper( dwCoInit ) )
|
| - {
|
| - }
|
| - HRESULT hresult() const
|
| - {
|
| - return get(m_hr);
|
| - }
|
| - auto_co_close const m_hr;
|
| - private:
|
| - auto_co_init & operator=( auto_co_init const & );
|
| - };
|
| -#endif
|
|
|