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...
 
void swap (RCPNodeHandle &node_ref)
 Swap the contents of node_ref with *this. More...
 
RCPNodeHandleoperator= (const RCPNodeHandle &node_ref)
 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...
 
int count () const
 The strong count; retained for backwards compatibility. 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 ( )
inline

Destructor.

Definition at line 839 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 814 of file Teuchos_RCPNode.hpp.

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

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 824 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 845 of file Teuchos_RCPNode.hpp.

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

Return a weak handle.

Definition at line 855 of file Teuchos_RCPNode.hpp.

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

Return a strong handle.

Definition at line 862 of file Teuchos_RCPNode.hpp.

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

Return a pointer to the underlying RCPNode.

Definition at line 869 of file Teuchos_RCPNode.hpp.

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

Whether the underlying RCPNode is NULL.

Definition at line 873 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 879 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 887 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 891 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 898 of file Teuchos_RCPNode.hpp.

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

The sum of the weak and string counts.

Definition at line 905 of file Teuchos_RCPNode.hpp.

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

The strong count; retained for backwards compatibility.

Definition at line 912 of file Teuchos_RCPNode.hpp.

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

The strength of this handle.

Definition at line 919 of file Teuchos_RCPNode.hpp.

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

Definition at line 923 of file Teuchos_RCPNode.hpp.

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

Definition at line 929 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 936 of file Teuchos_RCPNode.hpp.

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

Definition at line 945 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 953 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 960 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 968 of file Teuchos_RCPNode.hpp.

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

Definition at line 975 of file Teuchos_RCPNode.hpp.

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

Definition at line 984 of file Teuchos_RCPNode.hpp.

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

Definition at line 995 of file Teuchos_RCPNode.hpp.

bool Teuchos::RCPNodeHandle::attemptConvertWeakToStrong ( )
inlineprivate

Definition at line 1014 of file Teuchos_RCPNode.hpp.

void Teuchos::RCPNodeHandle::bind ( )
inlineprivate

Definition at line 1024 of file Teuchos_RCPNode.hpp.

void Teuchos::RCPNodeHandle::unbind ( )
inlineprivate

Definition at line 1029 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 1059 of file Teuchos_RCPNode.hpp.

Member Data Documentation

RCPNode* Teuchos::RCPNodeHandle::node_
private

Definition at line 1010 of file Teuchos_RCPNode.hpp.

ERCPStrength Teuchos::RCPNodeHandle::strength_
private

Definition at line 1011 of file Teuchos_RCPNode.hpp.


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