XRootD
XrdCl::AnyObject Class Reference

#include <XrdClAnyObject.hh>

+ Collaboration diagram for XrdCl::AnyObject:

Public Member Functions

 AnyObject ()
 Constructor. More...
 
 ~AnyObject ()
 Destructor. More...
 
template<class Type >
void Get (Type &object)
 Retrieve the object being held. More...
 
template<class Type >
bool Has ()
 
bool HasOwnership () const
 Check if we own the object being stored. More...
 
template<class Type >
void Set (Type object, bool own=true)
 

Detailed Description

Simple implementation of a type safe holder for any object pointer It would have been a better idea to use boost::any here but we don't want to depend on boost

Definition at line 32 of file XrdClAnyObject.hh.

Constructor & Destructor Documentation

◆ AnyObject()

XrdCl::AnyObject::AnyObject ( )
inline

Constructor.

Definition at line 38 of file XrdClAnyObject.hh.

38 : pHolder(0), pTypeInfo(0), pOwn( true ) {};

◆ ~AnyObject()

XrdCl::AnyObject::~AnyObject ( )
inline

Destructor.

Definition at line 43 of file XrdClAnyObject.hh.

44  {
45  if( pHolder && pOwn )
46  pHolder->Delete();
47  delete pHolder;
48  }

Member Function Documentation

◆ Get()

template<class Type >
void XrdCl::AnyObject::Get ( Type &  object)
inline

Retrieve the object being held.

Definition at line 78 of file XrdClAnyObject.hh.

79  {
80  if( !pHolder || (strcmp( pTypeInfo->name(), typeid( Type ).name() )) )
81  {
82  object = 0;
83  return;
84  }
85  object = static_cast<Type>( pHolder->Get() );
86  }

Referenced by XrdCl::XRootDTransport::DecFileInstCnt(), XrdCl::FileSystem::DirList(), XrdCl::XRootDTransport::Disconnect(), XrdCl::XRootDTransport::GetBindPreference(), XrdCl::Utils::GetProtocolVersion(), XrdCl::GetResponse(), XrdCl::XRootDTransport::GetSignature(), XrdCl::PgReadSubstitutionHandler::HandleResponse(), XrdPosixFileRH::HandleResponse(), XrdCl::EcPgReadResponseHandler::HandleResponse(), XrdCl::MetalinkReadHandler::HandleResponse(), XrdCl::UnpackXAttrStatus::HandleResponse(), XrdCl::UnpackXAttr::HandleResponse(), XrdCl::XRootDTransport::HandShake(), XrdCl::XRootDTransport::HandShakeDone(), XrdCl::XRootDTransport::IsStreamBroken(), XrdCl::XRootDTransport::IsStreamTTLElapsed(), XrdCl::XRootDTransport::MessageReceived(), XrdCl::XRootDTransport::MessageSent(), XrdCl::XRootDTransport::MultiplexSubStream(), XrdCl::XRootDTransport::NbConnectedStrm(), XrdCl::XRootDTransport::NeedEncryption(), XrdCl::Stream::OnConnect(), XrdCl::FileStateHandler::OnOpen(), XrdCl::FileStateHandler::OnStateResponse(), XrdCl::FileStateHandler::PgRead(), XrdCl::FileStateHandler::PgWrite(), XrdCl::XRootDMsgHandler::Process(), XrdCl::XRootDTransport::Query(), XrdCl::StatAction::Serialize(), XrdCl::ReadAction::Serialize(), XrdCl::PgReadAction::Serialize(), XrdCl::VectorReadAction::Serialize(), XrdCl::FcntlAction::Serialize(), XrdCl::XRootDTransport::SubStreamNumber(), XrdCl::To(), XrdCl::MessageUtils::WaitForResponse(), and XrdSsiTaskReal::XeqEvent().

+ Here is the caller graph for this function:

◆ Has()

template<class Type >
bool XrdCl::AnyObject::Has ( )
inline
Returns
true is AnyObject holds an instance of given type

Definition at line 92 of file XrdClAnyObject.hh.

93  {
94  if( !pHolder ) return false;
95  return strcmp( pTypeInfo->name(), typeid( Type* ).name() ) == 0;
96  }

◆ HasOwnership()

bool XrdCl::AnyObject::HasOwnership ( ) const
inline

Check if we own the object being stored.

Definition at line 101 of file XrdClAnyObject.hh.

102  {
103  return pOwn;
104  }

◆ Set()

template<class Type >
void XrdCl::AnyObject::Set ( Type  object,
bool  own = true 
)
inline

Grab an object By default the ownership of the object is taken as well, ie. the object will be deleted when the AnyObject holding it is deleted. To release an object grab a zero pointer, ie. (int *)0

Parameters
objectobject pointer
owntake the ownership or not

Definition at line 59 of file XrdClAnyObject.hh.

60  {
61  if( !object )
62  {
63  delete pHolder;
64  pHolder = 0;
65  pTypeInfo = 0;
66  return;
67  }
68 
69  delete pHolder;
70  pHolder = new ConcreteHolder<Type>( object );
71  pOwn = own;
72  pTypeInfo = &typeid( Type );
73  }

Referenced by XrdCl::LocalFileHandler::DelXAttr(), XrdCl::AsyncVectorReader::GetResponse(), XrdCl::LocalFileHandler::GetXAttr(), XrdCl::PgReadSubstitutionHandler::HandleResponse(), XrdCl::ZipListHandler::HandleResponse(), XrdCl::EcPgReadResponseHandler::HandleResponse(), XrdCl::UnpackXAttr::HandleResponse(), XrdCl::XRootDTransport::InitializeChannel(), XrdCl::LocalFileHandler::ListXAttr(), XrdCl::Stream::Query(), XrdCl::XRootDTransport::Query(), XrdCl::LocalFileHandler::Read(), XrdCl::LocalFileHandler::ReadV(), XrdCl::ZipStatImpl< HasHndl >::RunImpl(), XrdCl::ZipListImpl< HasHndl >::RunImpl(), XrdEc::ScheduleHandler(), XrdCl::LocalFileHandler::SetXAttr(), XrdCl::LocalFileHandler::Stat(), XrdCl::FileStateHandler::Stat(), XrdCl::LocalFileHandler::VectorRead(), and XrdCl::MessageUtils::WaitForResponse().

+ Here is the caller graph for this function:

The documentation for this class was generated from the following file: