43 #ifndef TEUCHOS_ARRAY_RCP_DECL_HPP 44 #define TEUCHOS_ARRAY_RCP_DECL_HPP 48 #include "Teuchos_Exceptions.hpp" 49 #include "Teuchos_ArrayViewDecl.hpp" 165 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 193 inline ArrayRCP( ENull null_arg = null );
241 template<
class Dealloc_T>
353 inline T*
get()
const;
592 inline void assign(Iter first, Iter last);
790 inline void debug_assert_not_null ()
const {
791 #ifdef TEUCHOS_REFCOUNTPTR_ASSERT_NONNULL 797 debug_assert_in_range (
size_type lowerOffset_in,
800 (void) lowerOffset_in;
802 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 807 inline void debug_assert_valid_ptr()
const {
815 #ifndef DOXYGEN_COMPILE 821 const RCPNodeHandle& node );
822 T* access_private_ptr()
const;
823 RCPNodeHandle& nonconst_access_private_node();
824 const RCPNodeHandle& access_private_node()
const;
840 typedef Teuchos_Ordinal
Ordinal;
852 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 860 inline ArrayRCP (ENull null_arg = null);
864 template<
class Dealloc_T>
867 inline explicit ArrayRCP (size_type
size,
const T& val = T ());
875 inline const T*
get()
const;
877 inline const T&
operator[] (size_type offset)
const;
888 inline iterator
begin()
const;
889 inline iterator
end()
const;
901 inline size_type
size()
const;
907 inline void resize (
const size_type n,
const T& val = T ());
908 inline void clear ();
931 size_type lowerOffset_;
932 size_type upperOffset_;
934 inline void debug_assert_not_null()
const {
935 #ifdef TEUCHOS_REFCOUNTPTR_ASSERT_NONNULL 941 debug_assert_in_range (size_type lowerOffset_in,
942 size_type size_in)
const 944 (void) lowerOffset_in; (void) size_in;
945 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 950 inline void debug_assert_valid_ptr()
const {
958 #ifndef DOXYGEN_COMPILE 965 const T* access_private_ptr()
const;
983 typedef Teuchos_Ordinal
Ordinal;
1008 typedef Teuchos_Ordinal
Ordinal;
1035 template<
typename T>
1052 bool owns_mem =
true 1061 template<
class T,
class Dealloc_T>
1066 Dealloc_T dealloc,
bool owns_mem
1119 template<
class T,
class Embedded>
1121 arcpWithEmbeddedObjPreDestroy(
1125 const Embedded &embedded,
1126 bool owns_mem =
true 1140 template<
class T,
class Embedded>
1142 arcpWithEmbeddedObjPostDestroy(
1146 const Embedded &embedded,
1147 bool owns_mem =
true 1162 template<
class T,
class Embedded>
1164 arcpWithEmbeddedObj(
1168 const Embedded &embedded,
1169 bool owns_mem =
true 1260 template<
class T1,
class T2>
1268 template<
class T1,
class T2>
1276 template<
class T1,
class T2>
1277 bool operator<( const ArrayRCP<T1> &p1,
const ArrayRCP<T2> &p2 );
1284 template<
class T1,
class T2>
1285 bool operator<=( const ArrayRCP<T1> &p1,
const ArrayRCP<T2> &p2 );
1292 template<
class T1,
class T2>
1300 template<
class T1,
class T2>
1326 template<
class T2,
class T1>
1342 template<
class T2,
class T1>
1362 template<
class T2,
class T1>
1391 template<
class T2,
class T1>
1454 template<
class T1,
class T2>
1455 void set_extra_data(
1456 const T1 &extra_data,
const std::string& name,
1458 bool force_unique =
true );
1480 template<
class T1,
class T2>
1481 T1& get_extra_data(
ArrayRCP<T2>& p,
const std::string& name );
1509 template<
class T1,
class T2>
1510 const T1& get_extra_data(
const ArrayRCP<T2>& p,
const std::string& name );
1537 template<
class T1,
class T2>
1538 T1* get_optional_extra_data(
ArrayRCP<T2>& p,
const std::string& name );
1570 template<
class T1,
class T2>
1571 const T1* get_optional_extra_data(
const ArrayRCP<T2>& p,
const std::string& name );
1584 template<
class Dealloc_T,
class T>
1585 Dealloc_T& get_nonconst_dealloc(
const ArrayRCP<T>& p );
1605 template<
class Dealloc_T,
class T>
1606 const Dealloc_T& get_dealloc(
const ArrayRCP<T>& p );
1623 template<
class Dealloc_T,
class T>
1624 const Dealloc_T* get_optional_dealloc(
const ArrayRCP<T>& p );
1648 template<
class Dealloc_T,
class T>
1649 Dealloc_T* get_optional_nonconst_dealloc(
const ArrayRCP<T>& p );
1658 template<
class TOrig,
class Embedded,
class T>
1659 const Embedded& getEmbeddedObj(
const ArrayRCP<T>& p );
1668 template<
class TOrig,
class Embedded,
class T>
1669 Embedded& getNonconstEmbeddedObj(
const ArrayRCP<T>& p );
1680 std::ostream& operator<<( std::ostream& out, const ArrayRCP<T>& p );
1686 #endif // TEUCHOS_ARRAY_RCP_DECL_HPP const T * const_iterator
Constant iterator type used if bounds checking is disabled.
ArrayRCP< T > create_weak() const
Create a new weak reference from another (strong) reference.
std::random_access_iterator_tag iterator_category
Category of ArrayRCP's iterator type.
ArrayRCP< T > operator+(size_type offset) const
Pointer integer increment (i.e. ptr+offset).
ArrayRCP(ENull null_arg=null)
Default constructor; initialize to an empty array.
Partial specialization of ArrayRCP for const T.
Ordinal difference_type
Type representing the difference between two size_type values.
size_type size() const
The total number of entries in the array.
ArrayRCP< T > & operator++()
Prefix increment of pointer (i.e. ++ptr).
ArrayRCP< T > & operator+=(size_type offset)
Pointer integer increment (i.e. ptr+=offset).
T & operator[](size_type offset) const
Random object access.
bool nonnull(const std::shared_ptr< T > &p)
Returns true if p.get()!=NULL.
bool is_null(const std::shared_ptr< T > &p)
Returns true if p.get()==NULL.
ArrayRCP< T > & operator-=(size_type offset)
Pointer integer increment (i.e. ptr-=offset).
int strong_count() const
Return the number of active RCP<> objects that have a "strong" reference to the underlying reference-...
ArrayRCP< T > & operator--()
Prefix decrement of pointer (i.e. –ptr).
T * release()
Release the ownership of the underlying array.
const ArrayRCP< T > & assert_not_null() const
Throws NullReferenceError if this->get()==NULL, otherwise returns reference to *this.
void clear()
Resize to zero.
Ordinal size_type
Type representing the number of elements in an ArrayRCP or view thereof.
~ArrayRCP()
Destructor, that decrements the reference count.
T element_type
Type of each array element.
const ArrayRCP< T > & assert_valid_ptr() const
If the object pointer is non-null, assert that it is still valid.
void resize(const size_type n, const T &val=T())
Resize and append new elements if necessary.
T * const_pointer
Type of a (raw) (constant) pointer to an array element.
Teuchos_Ordinal Ordinal
Integer index type used throughout ArrayRCP.
bool has_ownership() const
Returns true if this has ownership of object pointed to by this->get() in order to deallocate it...
bool shares_resource(const ArrayRCP< T2 > &r_ptr) const
Returns true if the smart pointers share the same underlying reference-counted object.
ArrayRCP< const T > getConst() const
Return object for only const access to data.
ArrayRCP< T > persistingView(size_type lowerOffset, size_type size) const
Return a persisting view of a contiguous range of elements.
T value_type
Type of each array element.
int total_count() const
Total count (strong_count() + weak_count()).
bool is_valid_ptr() const
Return whether the underlying object pointer is still valid.
const ArrayRCP< T > & assert_in_range(size_type lowerOffset, size_type size) const
Throws NullReferenceError if this->get()==NULL orthis->get()!=NULL, throws RangeError if (lowerOffset...
void deepCopy(const ArrayView< const T > &av)
Deep copy the elements from one ArrayView object into this object.
ERCPStrength
Used to specify if the pointer is weak or strong.
size_type upperOffset() const
Return the upper offset to valid data.
ArrayRCP< T > create_strong() const
Create a new strong RCP object from another (weak) RCP object.
iterator end() const
Return an iterator to past the end of the array of data.
Base traits class for getting a properly initialized null pointer.
int weak_count() const
Return the number of active RCP<> objects that have a "weak" reference to the underlying reference-co...
iterator begin() const
Return an iterator to beginning of the array of data.
ERCPStrength strength() const
Strength of the pointer.
T * iterator_type
Type of an ArrayRCP's iterator.
const T & const_reference
Type of a (constant) reference to an array element.
bool is_null() const
True if the underlying pointer is null, else false.
T * pointer
Type of a (raw) (nonconstant) pointer to an array element.
void set_has_ownership()
Give this and other ArrayRCP<> objects ownership of the underlying referenced array to delete it...
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos, as well as a number of utility routines.
Handle class that manages the RCPNode's reference counting.
ArrayView< T > view(size_type lowerOffset, size_type size) const
Return a nonpersisting view of a contiguous range of elements.
ERCPNodeLookup
Used to determine if RCPNode lookup is performed or not.
EPrePostDestruction
Used to specify a pre or post destruction of extra data.
T & operator*() const
Dereference the underlying object for the current pointer position.
ArrayRCP< T > & operator=(const ArrayRCP< T > &r_ptr)
Assignment operator: Makes *this reference the input array.
Smart reference counting pointer class for automatic garbage collection.
T * getRawPtr() const
Get the raw C++ pointer to the underlying object.
ArrayRCP< T > operator-(size_type offset) const
Pointer integer decrement (i.e. ptr-offset).
T * iterator
Nonconstant iterator type used if bounds checking is disabled.
Partial specialization of ArrayView for const T.
T & reference
Type of a (nonconstant) reference to an array element.
size_type lowerOffset() const
Return the lower offset to valid data.
Reference-counted pointer class and non-member templated function implementations.
Simple wrapper class for raw pointers to single objects where no persisting relationship exists...
void assign(size_type n, const T &val)
Resize and assign n elements of val.
Reference-counted smart pointer for managing arrays.
ArrayView< T > operator()() const
Return a nonpersisting view of *this.
T * operator->() const
Pointer (->) access to members of underlying object for current position.