43 #ifndef TEUCHOS_ARRAY_RCP_DECL_HPP
44 #define TEUCHOS_ARRAY_RCP_DECL_HPP
165 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
241 template<
class Dealloc_T>
353 inline T*
get()
const;
592 inline void assign(Iter first, Iter last);
783 inline TEUCHOS_DEPRECATED
int count()
const;
798 #ifdef TEUCHOS_REFCOUNTPTR_ASSERT_NONNULL
807 (void) lowerOffset_in;
809 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
822 #ifndef DOXYGEN_COMPILE
829 T* access_private_ptr()
const;
859 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
871 template<
class Dealloc_T>
882 inline const T*
get()
const;
915 inline void clear ();
935 inline TEUCHOS_DEPRECATED
int count()
const;
944 #ifdef TEUCHOS_REFCOUNTPTR_ASSERT_NONNULL
953 (void) lowerOffset_in; (void) size_in;
954 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
967 #ifndef DOXYGEN_COMPILE
974 const T* access_private_ptr()
const;
1044 template<
typename T>
1059 typename ArrayRCP<T>::size_type lowerOffset,
1060 typename ArrayRCP<T>::size_type size,
1061 bool owns_mem =
true
1070 template<
class T,
class Dealloc_T>
1073 typename ArrayRCP<T>::size_type lowerOffset,
1074 typename ArrayRCP<T>::size_type size,
1075 Dealloc_T dealloc,
bool owns_mem
1090 ArrayRCP<T> arcp(
typename ArrayRCP<T>::size_type size );
1107 ArrayRCP<T> arcpCloneNode(
const ArrayRCP<T> &a );
1115 ArrayRCP<T> arcpClone(
const ArrayView<const T> &v );
1128 template<
class T,
class Embedded>
1130 arcpWithEmbeddedObjPreDestroy(
1132 typename ArrayRCP<T>::size_type lowerOffset,
1133 typename ArrayRCP<T>::size_type size,
1134 const Embedded &embedded,
1135 bool owns_mem =
true
1149 template<
class T,
class Embedded>
1151 arcpWithEmbeddedObjPostDestroy(
1153 typename ArrayRCP<T>::size_type lowerOffset,
1154 typename ArrayRCP<T>::size_type size,
1155 const Embedded &embedded,
1156 bool owns_mem =
true
1171 template<
class T,
class Embedded>
1173 arcpWithEmbeddedObj(
1175 typename ArrayRCP<T>::size_type lowerOffset,
1176 typename ArrayRCP<T>::size_type size,
1177 const Embedded &embedded,
1178 bool owns_mem =
true
1188 ArrayRCP<T> arcp(
const RCP<std::vector<T> > &v );
1197 ArrayRCP<const T> arcp(
const RCP<
const std::vector<T> > &v );
1209 ArrayRCP<T> arcpFromArrayView(
const ArrayView<T> &av);
1220 RCP<std::vector<T> > get_std_vector(
const ArrayRCP<T> &ptr );
1230 RCP<const std::vector<T> > get_std_vector(
const ArrayRCP<const T> &ptr );
1238 bool is_null(
const ArrayRCP<T> &p );
1246 bool nonnull(
const ArrayRCP<T> &p );
1254 bool operator==(
const ArrayRCP<T> &p, ENull );
1262 bool operator!=(
const ArrayRCP<T> &p, ENull );
1269 template<
class T1,
class T2>
1270 bool operator==(
const ArrayRCP<T1> &p1,
const ArrayRCP<T2> &p2 );
1277 template<
class T1,
class T2>
1278 bool operator!=(
const ArrayRCP<T1> &p1,
const ArrayRCP<T2> &p2 );
1285 template<
class T1,
class T2>
1286 bool operator<( const ArrayRCP<T1> &p1,
const ArrayRCP<T2> &p2 );
1293 template<
class T1,
class T2>
1294 bool operator<=( const ArrayRCP<T1> &p1,
const ArrayRCP<T2> &p2 );
1301 template<
class T1,
class T2>
1302 bool operator>(
const ArrayRCP<T1> &p1,
const ArrayRCP<T2> &p2 );
1309 template<
class T1,
class T2>
1310 bool operator>=(
const ArrayRCP<T1> &p1,
const ArrayRCP<T2> &p2 );
1321 typename ArrayRCP<T>::difference_type
1322 operator-(
const ArrayRCP<T> &p1,
const ArrayRCP<T> &p2 );
1335 template<
class T2,
class T1>
1337 ArrayRCP<T2> arcp_const_cast(
const ArrayRCP<T1>& p1);
1351 template<
class T2,
class T1>
1352 ArrayRCP<T2> arcp_reinterpret_cast(
const ArrayRCP<T1>& p1);
1371 template<
class T2,
class T1>
1372 ArrayRCP<T2> arcp_reinterpret_cast_nonpod(
const ArrayRCP<T1>& p1,
const T2& val=T2());
1400 template<
class T2,
class T1>
1402 ArrayRCP<T2> arcp_implicit_cast(
const ArrayRCP<T1>& p1);
1463 template<
class T1,
class T2>
1464 void set_extra_data(
1465 const T1 &extra_data,
const std::string& name,
1467 bool force_unique =
true );
1489 template<
class T1,
class T2>
1490 T1& get_extra_data( ArrayRCP<T2>& p,
const std::string& name );
1518 template<
class T1,
class T2>
1519 const T1& get_extra_data(
const ArrayRCP<T2>& p,
const std::string& name );
1546 template<
class T1,
class T2>
1547 T1* get_optional_extra_data( ArrayRCP<T2>& p,
const std::string& name );
1579 template<
class T1,
class T2>
1580 const T1* get_optional_extra_data(
const ArrayRCP<T2>& p,
const std::string& name );
1593 template<
class Dealloc_T,
class T>
1594 Dealloc_T& get_nonconst_dealloc(
const ArrayRCP<T>& p );
1614 template<
class Dealloc_T,
class T>
1615 const Dealloc_T& get_dealloc(
const ArrayRCP<T>& p );
1632 template<
class Dealloc_T,
class T>
1633 const Dealloc_T* get_optional_dealloc(
const ArrayRCP<T>& p );
1657 template<
class Dealloc_T,
class T>
1658 Dealloc_T* get_optional_nonconst_dealloc(
const ArrayRCP<T>& p );
1667 template<
class TOrig,
class Embedded,
class T>
1668 const Embedded& getEmbeddedObj(
const ArrayRCP<T>& p );
1677 template<
class TOrig,
class Embedded,
class T>
1678 Embedded& getNonconstEmbeddedObj(
const ArrayRCP<T>& p );
1689 std::ostream& operator<<( std::ostream& out, const ArrayRCP<T>& p );
1695 #endif // TEUCHOS_ARRAY_RCP_DECL_HPP
const T * const_iterator
Constant iterator type used if bounds checking is disabled.
std::random_access_iterator_tag iterator_category
Category of ArrayRCP's iterator type.
size_type lowerOffset_
Lower offset to the data; 0 if this array is null.
TEUCHOS_DEPRECATED int count() const
Returns strong_count() [deprecated].
ERCPStrength
Used to specify if the pointer is weak or strong.
ArrayRCP< T > create_weak() const
Create a new weak reference from another (strong) reference.
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...
const void * const_pointer
std::random_access_iterator_tag iterator_category
void debug_assert_not_null() const
BigUInt< n > operator-(BigUInt< n > const &a, BigUInt< n > const &b)
ArrayRCP(ENull null_arg=null)
Default constructor; initialize to an empty array.
ArrayRCP< T > persistingView(size_type lowerOffset, size_type size) const
Return a persisting view of a contiguous range of elements.
Partial specialization of ArrayRCP for const T.
const T & const_reference
Ordinal difference_type
Type representing the difference between two size_type values.
ArrayRCP< T > & operator++()
Prefix increment of pointer (i.e. ++ptr).
ArrayRCP< T > & operator+=(size_type offset)
Pointer integer increment (i.e. ptr+=offset).
int weak_count() const
Return the number of active RCP<> objects that have a "weak" reference to the underlying reference-co...
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).
T * getRawPtr() const
Get the raw C++ pointer to the underlying object.
size_type upperOffset() const
Return the upper offset to valid data.
ArrayRCP< T > & operator--()
Prefix decrement of pointer (i.e. –ptr).
T * release()
Release the ownership of the underlying array.
ERCPNodeLookup
Used to determine if RCPNode lookup is performed or not.
ArrayRCP< const T > getConst() const
Return object for only const access to data.
ENull
Used to initialize a RCP object to NULL using an implicit conversion!
void clear()
Resize to zero.
size_type size() const
The total number of entries in the array.
Ordinal size_type
Type representing the number of elements in an ArrayRCP or view thereof.
~ArrayRCP()
Destructor, that decrements the reference count.
ERCPStrength strength() const
Strength of the pointer.
void debug_assert_valid_ptr() const
RCPNodeHandle node_
Reference-counting machinery.
bool shares_resource(const ArrayRCP< T2 > &r_ptr) const
Returns true if the smart pointers share the same underlying reference-counted object.
void debug_assert_not_null() const
bool is_valid_ptr() const
Return whether the underlying object pointer is still valid.
const ArrayRCP< T > & assert_not_null() const
Throws NullReferenceError if this->get()==NULL, otherwise returns reference to *this.
T element_type
Type of each array element.
bool operator!=(const Allocator< T > &a_t, const Allocator< U > &a_u)
Return ! (a_t == a_u) (see above).
T * operator->() const
Pointer (->) access to members of underlying object for current position.
void resize(const size_type n, const T &val=T())
Resize and append new elements if necessary.
static ArrayRCP< T > getNull()
T * const_pointer
Type of a (raw) (constant) pointer to an array element.
Teuchos_Ordinal Ordinal
Integer index type used throughout ArrayRCP.
TEUCHOS_ORDINAL_TYPE Teuchos_Ordinal
bool operator>(BigUInt< n > const &a, BigUInt< n > const &b)
bool operator>=(BigUInt< n > const &a, BigUInt< n > const &b)
ArrayRCP< T > create_strong() const
Create a new strong RCP object from another (weak) RCP object.
T value_type
Type of each array element.
std::random_access_iterator_tag iterator_category
ArrayRCP< T > operator+(size_type offset) const
Pointer integer increment (i.e. ptr+offset).
void deepCopy(const ArrayView< const T > &av)
Deep copy the elements from one ArrayView object into this object.
size_type lowerOffset() const
Return the lower offset to valid data.
int total_count() const
Total count (strong_count() + weak_count()).
void debug_assert_valid_ptr() const
T & operator*() const
Dereference the underlying object for the current pointer position.
Base traits class for getting a properly initialized null pointer.
T * ptr_
Raw pointer to the array; NULL if this array is null.
T * iterator_type
Type of an ArrayRCP's iterator.
const T & const_reference
Type of a (constant) reference to an array element.
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...
EPrePostDestruction
Used to specify a pre or post destruction of extra data.
const void * iterator_type
Handle class that manages the RCPNode's reference counting.
void debug_assert_in_range(size_type lowerOffset_in, size_type size_in) const
ArrayView< T > operator()() const
Return a nonpersisting view of *this.
std::random_access_iterator_tag iterator_category
int strong_count() const
Return the number of active RCP<> objects that have a "strong" reference to the underlying reference-...
ArrayRCP< T > & operator=(const ArrayRCP< T > &r_ptr)
Assignment operator: Makes *this reference the input array.
ArrayRCP< T > operator-(size_type offset) const
Pointer integer decrement (i.e. ptr-offset).
T & operator[](size_type offset) const
Random object access.
T * iterator
Nonconstant iterator type used if bounds checking is disabled.
iterator end() const
Return an iterator to past the end of the array of data.
Partial specialization of ArrayView for const T.
size_type upperOffset_
Upper offset to the data; -1 if this array is null.
T & reference
Type of a (nonconstant) reference to an array element.
bool operator==(BigUInt< n > const &a, BigUInt< n > const &b)
bool is_null() const
True if the underlying pointer is null, else false.
void debug_assert_in_range(size_type lowerOffset_in, size_type size_in) const
Reference-counted pointer class and non-member templated function implementations.
const ArrayRCP< T > & assert_valid_ptr() const
If the object pointer is non-null, assert that it is still valid.
iterator begin() const
Return an iterator to beginning of the array of data.
bool has_ownership() const
Returns true if this has ownership of object pointed to by this->get() in order to deallocate it...
void assign(size_type n, const T &val)
Resize and assign n elements of val.
Reference-counted smart pointer for managing arrays.
ArrayView< T > view(size_type lowerOffset, size_type size) const
Return a nonpersisting view of a contiguous range of elements.