template<class T> inline ArrayRCP<T>::ArrayRCP( T* p, size_type lowerOffset_in, size_type size_in, bool has_ownership_in, const ERCPNodeLookup rcpNodeLookup ) : ptr_(p), #ifndef TEUCHOS_DEBUG node_(ArrayRCP_createNewRCPNodeRawPtr(p, has_ownership_in)), #endif // TEUCHOS_DEBUG lowerOffset_(lowerOffset_in), upperOffset_(size_in + lowerOffset_in - 1) { #ifdef TEUCHOS_DEBUG if (p) { RCPNode* existing_RCPNode = 0; if (!has_ownership_in && rcpNodeLookup==RCP_ENABLE_NODE_LOOKUP) { existing_RCPNode = RCPNodeTracer::getExistingRCPNode(p); } if (existing_RCPNode) { // Will not call add_new_RCPNode(...) node_ = RCPNodeHandle(existing_RCPNode, RCP_WEAK, false); } else { // Will call add_new_RCPNode(...) RCPNodeThrowDeleter nodeDeleter(ArrayRCP_createNewRCPNodeRawPtr(p, has_ownership_in)); node_ = RCPNodeHandle( nodeDeleter.get(), p, typeName(*p), concreteTypeName(*p), has_ownership_in ); nodeDeleter.release(); } } #endif // TEUCHOS_DEBUG }
RCPNodeHandle basicRCPNodeHandle(const bool has_ownership, T **p_out = 0) { T *p = 0; RCPNode *rcpNode = basicRCPNode(has_ownership, &p); if (p_out) *p_out = p; #ifdef TEUCHOS_DEBUG return RCPNodeHandle(rcpNode, p, typeName(*p), concreteTypeName(*p), has_ownership); #else return RCPNodeHandle(rcpNode); #endif }
inline ArrayRCP<T>::ArrayRCP( T* p, size_type lowerOffset_in, size_type size_in, Dealloc_T dealloc, bool has_ownership_in ) : ptr_(p), #ifndef TEUCHOS_DEBUG node_(ArrayRCP_createNewDeallocRCPNodeRawPtr(p, dealloc, has_ownership_in)), #endif // TEUCHOS_DEBUG lowerOffset_(lowerOffset_in), upperOffset_(size_in + lowerOffset_in - 1) { #ifdef TEUCHOS_DEBUG if (p) { node_ = RCPNodeHandle( ArrayRCP_createNewDeallocRCPNodeRawPtr(p, dealloc, has_ownership_in), p, typeName(*p), concreteTypeName(*p), has_ownership_in //, RCP_STRONG, false ); } #endif // TEUCHOS_DEBUG }