Teuchos Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Private Member Functions | Private Attributes | Related Functions | List of all members
Teuchos::RCPNodeHandle Class Reference

Handle class that manages the RCPNode's reference counting. More...

#include <Teuchos_RCPNode.hpp>

Public Member Functions

 RCPNodeHandle (ENull null_arg=null)
 Default constructor. More...
 
 RCPNodeHandle (RCPNode *node, ERCPStrength strength_in=RCP_STRONG, bool newNode=true)
 Constructor that takes a pointer to an RCPNode. More...
 
 RCPNodeHandle (const RCPNodeHandle &node_ref)
 Copy constructor. More...
 
 RCPNodeHandle (RCPNodeHandle &&node_ref)
 Move constructor. More...
 
void swap (RCPNodeHandle &node_ref)
 Swap the contents of node_ref with *this. More...
 
RCPNodeHandleoperator= (ENull)
 Null assignment. More...
 
RCPNodeHandleoperator= (const RCPNodeHandle &node_ref)
 Copy assignment operator. More...
 
RCPNodeHandleoperator= (RCPNodeHandle &&node_ref)
 Move assignment operator. More...
 
 ~RCPNodeHandle ()
 Destructor. More...
 
RCPNodeHandle create_strong_lock () const
 Return a strong handle if possible using thread safe atomics. More...
 
RCPNodeHandle create_weak () const
 Return a weak handle. More...
 
RCPNodeHandle create_strong () const
 Return a strong handle. More...
 
RCPNodenode_ptr () const
 Return a pointer to the underlying RCPNode. More...
 
bool is_node_null () const
 Whether the underlying RCPNode is NULL. More...
 
bool is_valid_ptr () const
 Whether the underlying pointer is valid. More...
 
bool same_node (const RCPNodeHandle &node2) const
 Whether the RCPNode for which node2 is a handle is the same RCPNode as this object's RCPNode. More...
 
int strong_count () const
 The strong count for this RCPNode, or 0 if the node is NULL. More...
 
int weak_count () const
 The weak count for this RCPNode, or 0 if the node is NULL. More...
 
int total_count () const
 The sum of the weak and string counts. More...
 
ERCPStrength strength () const
 The strength of this handle. More...
 
void has_ownership (bool has_ownership_in)
 
bool has_ownership () const
 
void set_extra_data (const any &extra_data, const std::string &name, EPrePostDestruction destroy_when, bool force_unique)
 
anyget_extra_data (const std::string &type_name, const std::string &name)
 
const anyget_extra_data (const std::string &type_name, const std::string &name) const
 
anyget_optional_extra_data (const std::string &type_name, const std::string &name)
 
const anyget_optional_extra_data (const std::string &type_name, const std::string &name) const
 
void debug_assert_not_null () const
 
template<class RCPType >
void assert_valid_ptr (const RCPType &rcp_obj) const
 
template<class RCPType >
void debug_assert_valid_ptr (const RCPType &rcp_obj) const
 

Private Member Functions

bool attemptConvertWeakToStrong ()
 
void bind ()
 
void unbind ()
 
void unbindOneStrong ()
 
void unbindOneTotal ()
 

Private Attributes

RCPNodenode_
 
ERCPStrength strength_
 

Related Functions

(Note that these are not member functions.)

std::ostream & operator<< (std::ostream &out, const RCPNodeHandle &node)
 Ouput stream operator for RCPNodeHandle. More...
 

Detailed Description

Handle class that manages the RCPNode's reference counting.

Warning
This class is not intended for Teuchos users. It is an implementation detail of Teuchos' reference-counting "smart" pointer (RCP) and array (ArrayRCP) classes.

NOTE: I (Ross Bartlett) am not generally a big fan of handle classes and greatly prefer smart pointers. However, this is one case where a handle class makes sense. First, I want special behavior in some functions when the wrapped RCPNode pointer is null. Second, I can't use one of the smart-pointer classes because this class is used to implement all of those smart-pointer classes!

Definition at line 748 of file Teuchos_RCPNode.hpp.

Constructor & Destructor Documentation

Teuchos::RCPNodeHandle::RCPNodeHandle ( ENull  null_arg = null)
inline

Default constructor.

Definition at line 751 of file Teuchos_RCPNode.hpp.

Teuchos::RCPNodeHandle::RCPNodeHandle ( RCPNode node,
ERCPStrength  strength_in = RCP_STRONG,
bool  newNode = true 
)
inline

Constructor that takes a pointer to an RCPNode.

Definition at line 758 of file Teuchos_RCPNode.hpp.

Teuchos::RCPNodeHandle::RCPNodeHandle ( const RCPNodeHandle node_ref)
inline

Copy constructor.

Definition at line 807 of file Teuchos_RCPNode.hpp.

Teuchos::RCPNodeHandle::RCPNodeHandle ( RCPNodeHandle &&  node_ref)
inline

Move constructor.

Definition at line 814 of file Teuchos_RCPNode.hpp.

Teuchos::RCPNodeHandle::~RCPNodeHandle ( )
inline

Destructor.

Definition at line 873 of file Teuchos_RCPNode.hpp.

Member Function Documentation

void Teuchos::RCPNodeHandle::swap ( RCPNodeHandle node_ref)
inline

Swap the contents of node_ref with *this.

Definition at line 822 of file Teuchos_RCPNode.hpp.

RCPNodeHandle& Teuchos::RCPNodeHandle::operator= ( ENull  )
inline

Null assignment.

This method satisfies the strong exception guarantee: It either returns successfully, or throws an exception without modifying any user-visible state.

Definition at line 834 of file Teuchos_RCPNode.hpp.

RCPNodeHandle& Teuchos::RCPNodeHandle::operator= ( const RCPNodeHandle node_ref)
inline

Copy assignment operator.

This method satisfies the strong exception guarantee: It either returns successfully, or throws an exception without modifying any user-visible state.

Definition at line 846 of file Teuchos_RCPNode.hpp.

RCPNodeHandle& Teuchos::RCPNodeHandle::operator= ( RCPNodeHandle &&  node_ref)
inline

Move assignment operator.

This method satisfies the strong exception guarantee: It either returns successfully, or throws an exception without modifying any user-visible state.

Definition at line 861 of file Teuchos_RCPNode.hpp.

RCPNodeHandle Teuchos::RCPNodeHandle::create_strong_lock ( ) const
inline

Return a strong handle if possible using thread safe atomics.

Definition at line 879 of file Teuchos_RCPNode.hpp.

RCPNodeHandle Teuchos::RCPNodeHandle::create_weak ( ) const
inline

Return a weak handle.

Definition at line 889 of file Teuchos_RCPNode.hpp.

RCPNodeHandle Teuchos::RCPNodeHandle::create_strong ( ) const
inline

Return a strong handle.

Definition at line 896 of file Teuchos_RCPNode.hpp.

RCPNode* Teuchos::RCPNodeHandle::node_ptr ( ) const
inline

Return a pointer to the underlying RCPNode.

Definition at line 903 of file Teuchos_RCPNode.hpp.

bool Teuchos::RCPNodeHandle::is_node_null ( ) const
inline

Whether the underlying RCPNode is NULL.

Definition at line 907 of file Teuchos_RCPNode.hpp.

bool Teuchos::RCPNodeHandle::is_valid_ptr ( ) const
inline

Whether the underlying pointer is valid.

Note
NULL is a valid pointer; this method returns true in that case.

Definition at line 913 of file Teuchos_RCPNode.hpp.

bool Teuchos::RCPNodeHandle::same_node ( const RCPNodeHandle node2) const
inline

Whether the RCPNode for which node2 is a handle is the same RCPNode as this object's RCPNode.

Definition at line 921 of file Teuchos_RCPNode.hpp.

int Teuchos::RCPNodeHandle::strong_count ( ) const
inline

The strong count for this RCPNode, or 0 if the node is NULL.

Definition at line 925 of file Teuchos_RCPNode.hpp.

int Teuchos::RCPNodeHandle::weak_count ( ) const
inline

The weak count for this RCPNode, or 0 if the node is NULL.

Definition at line 932 of file Teuchos_RCPNode.hpp.

int Teuchos::RCPNodeHandle::total_count ( ) const
inline

The sum of the weak and string counts.

Definition at line 939 of file Teuchos_RCPNode.hpp.

ERCPStrength Teuchos::RCPNodeHandle::strength ( ) const
inline

The strength of this handle.

Definition at line 946 of file Teuchos_RCPNode.hpp.

void Teuchos::RCPNodeHandle::has_ownership ( bool  has_ownership_in)
inline

Definition at line 950 of file Teuchos_RCPNode.hpp.

bool Teuchos::RCPNodeHandle::has_ownership ( ) const
inline

Definition at line 956 of file Teuchos_RCPNode.hpp.

void Teuchos::RCPNodeHandle::set_extra_data ( const any extra_data,
const std::string &  name,
EPrePostDestruction  destroy_when,
bool  force_unique 
)
inline

Definition at line 963 of file Teuchos_RCPNode.hpp.

any& Teuchos::RCPNodeHandle::get_extra_data ( const std::string &  type_name,
const std::string &  name 
)
inline

Definition at line 972 of file Teuchos_RCPNode.hpp.

const any& Teuchos::RCPNodeHandle::get_extra_data ( const std::string &  type_name,
const std::string &  name 
) const
inline

Definition at line 980 of file Teuchos_RCPNode.hpp.

any* Teuchos::RCPNodeHandle::get_optional_extra_data ( const std::string &  type_name,
const std::string &  name 
)
inline

Definition at line 987 of file Teuchos_RCPNode.hpp.

const any* Teuchos::RCPNodeHandle::get_optional_extra_data ( const std::string &  type_name,
const std::string &  name 
) const
inline

Definition at line 995 of file Teuchos_RCPNode.hpp.

void Teuchos::RCPNodeHandle::debug_assert_not_null ( ) const
inline

Definition at line 1002 of file Teuchos_RCPNode.hpp.

template<class RCPType >
void Teuchos::RCPNodeHandle::assert_valid_ptr ( const RCPType &  rcp_obj) const
inline

Definition at line 1011 of file Teuchos_RCPNode.hpp.

template<class RCPType >
void Teuchos::RCPNodeHandle::debug_assert_valid_ptr ( const RCPType &  rcp_obj) const
inline

Definition at line 1022 of file Teuchos_RCPNode.hpp.

bool Teuchos::RCPNodeHandle::attemptConvertWeakToStrong ( )
inlineprivate

Definition at line 1041 of file Teuchos_RCPNode.hpp.

void Teuchos::RCPNodeHandle::bind ( )
inlineprivate

Definition at line 1051 of file Teuchos_RCPNode.hpp.

void Teuchos::RCPNodeHandle::unbind ( )
inlineprivate

Definition at line 1056 of file Teuchos_RCPNode.hpp.

void Teuchos::RCPNodeHandle::unbindOneStrong ( )
private

Definition at line 724 of file Teuchos_RCPNode.cpp.

void Teuchos::RCPNodeHandle::unbindOneTotal ( )
private

Definition at line 734 of file Teuchos_RCPNode.cpp.

Friends And Related Function Documentation

std::ostream & operator<< ( std::ostream &  out,
const RCPNodeHandle node 
)
related

Ouput stream operator for RCPNodeHandle.

Definition at line 1085 of file Teuchos_RCPNode.hpp.

Member Data Documentation

RCPNode* Teuchos::RCPNodeHandle::node_
private

Definition at line 1037 of file Teuchos_RCPNode.hpp.

ERCPStrength Teuchos::RCPNodeHandle::strength_
private

Definition at line 1038 of file Teuchos_RCPNode.hpp.


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