42#ifndef TEUCHOS_ARRAY_RCP_HPP
43#define TEUCHOS_ARRAY_RCP_HPP
59template<
class T>
inline
68template<
class T,
class Dealloc_T>
71 T* p, Dealloc_T dealloc,
bool has_ownership_in
78template<
class T2,
class T1>
106 for (itr_t itr = arcp2.
begin(); itr != arcp2.
end(); ++itr) {
117template<
class T>
inline
122template<
class T>
inline
124 : ptr_(NULL), lowerOffset_(0), upperOffset_(-1)
128template<
class T>
inline
133 std::fill_n(
begin(), n, val);
136template<
class T>
inline
138 : ptr_(0), lowerOffset_(0), upperOffset_(-1)
147template<
class T>
inline
165 if (existing_RCPNode) {
181 (void) rcpNodeLookup;
185template<
class T>
inline
202 if (existing_RCPNode) {
218 (void) rcpNodeLookup;
224template<
class Dealloc_T>
228 Dealloc_T dealloc,
bool has_ownership_in
250template<
class Dealloc_T>
254 Dealloc_T dealloc,
bool has_ownership_in
276template<
class T>
inline
284template<
class T>
inline
293template<
class T>
inline
296template<
class T>
inline
300template<
class T>
inline
305 node_ = r_ptr.access_private_node();
314template<
class T>
inline
318 if (
this == &r_ptr) {
321 node_ = r_ptr.access_private_node ();
334template<
class T>
inline
339template<
class T>
inline
345template<
class T>
inline
353template<
class T>
inline
362template<
class T>
inline
370template<
class T>
inline
379template<
class T>
inline
389template<
class T>
inline
400template<
class T>
inline
405template<
class T>
inline
411template<
class T>
inline
419template<
class T>
inline
431template<
class T>
inline
441template<
class T>
inline
452template<
class T>
inline
461template<
class T>
inline
471template<
class T>
inline
481template<
class T>
inline
492template<
class T>
inline
501template<
class T>
inline
511template<
class T>
inline
521template<
class T>
inline
532template<
class T>
inline
542template<
class T>
inline
553template<
class T>
inline
561template<
class T>
inline
570template<
class T>
inline
578template<
class T>
inline
590template<
class T>
inline
594#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
601template<
class T>
inline
605#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
613template<
class T>
inline
617#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
624template<
class T>
inline
628#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
639template<
class T>
inline
644 const T *cptr =
ptr_;
650template<
class T>
inline
657template<
class T>
inline
667 ptr.ptr_ =
ptr.ptr_ + lowerOffset_in;
668 ptr.lowerOffset_ = 0;
669 ptr.upperOffset_ = size_in - 1;
673template<
class T>
inline
683 ptr.ptr_ =
ptr.ptr_ + lowerOffset_in;
684 ptr.lowerOffset_ = 0;
685 ptr.upperOffset_ = size_in - 1;
693template<
class T>
inline
701template<
class T>
inline
710template<
class T>
inline
718template<
class T>
inline
727template<
class T>
inline
735template<
class T>
inline
747template<
class T>
inline
755#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
763template<
class T>
inline
772#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
781template<
class T>
inline
784 return view(lowerOffset_in, size_in);
787template<
class T>
inline
791 return view (lowerOffset_in, size_in);
795template<
class T>
inline
804template<
class T>
inline
817template<
class T>
inline
838template<
class T>
inline
841 std::fill_n (this->
begin (), n, val);
849 const size_type new_n = std::distance (first, last);
850 if (new_n !=
size ()) {
853 std::copy (first, last,
begin ());
857template<
class T>
inline
871 const size_type small_n = std::min(n, orig_n);
880template<
class T>
inline
892 ArrayRCP<const T> tmp = *
this;
897 const size_type small_n = std::min (n, orig_n);
898 for (
size_type i = 0; i < small_n; ++i) {
899 nonconstThis[i] = tmp[i];
902 nonconstThis[i] = val;
910template<
class T>
inline
915template<
class T>
inline
924template<
class T>
inline
927 if (av.
size() == 0) {
938template<
class T>
inline
940 return node_.strength();
943template<
class T>
inline
949template<
class T>
inline
953 return node_.is_valid_ptr();
957template<
class T>
inline
966template<
class T>
inline
969 return node_.strong_count();
972template<
class T>
inline
979template<
class T>
inline
982 return node_.weak_count();
985template<
class T>
inline
992template<
class T>
inline
995 return node_.total_count();
998template<
class T>
inline
1005template<
class T>
inline
1008 node_.has_ownership(
true);
1011template<
class T>
inline
1018template<
class T>
inline
1021 return node_.has_ownership();
1024template<
class T>
inline
1031template<
class T>
inline
1035 node_.has_ownership(
false);
1039template<
class T>
inline
1048template<
class T>
inline
1054template<
class T>
inline
1061template<
class T>
inline
1067template<
class T>
inline
1079 return node_.same_node (r_ptr.access_private_node ());
1100template<
class T>
inline
1109template<
class T>
inline
1120template<
class T>
inline
1124 node_.assert_valid_ptr (*
this);
1129template<
class T>
inline
1139template<
class T>
inline
1151 typeName(*
this)<<
"::assert_in_range:"
1152 " Error, [lowerOffset,lowerOffset+size-1] = ["
1153 <<lowerOffset_in<<
","<<(lowerOffset_in+size_in-1)<<
"] does not lie in the"
1159template<
class T>
inline
1172 typeName (*
this) <<
"::assert_in_range:"
1173 " Error, [lowerOffset,lowerOffset+size-1] = ["
1174 <<lowerOffset_in<<
","<<(lowerOffset_in+size_in-1)<<
"] does not lie in the"
1184template<
class T>
inline
1195template<
class T>
inline
1207template<
class T>
inline
1213template<
class T>
inline
1214const T* ArrayRCP<const T>::access_private_ptr ()
const
1220template<
class T>
inline
1226template<
class T>
inline
1233template<
class T>
inline
1239template<
class T>
inline
1270template<
class T1,
class T2>
1275#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
1278 "Error, these iterators are *not* pointing to the same valid memory!"
1286template<
class T>
inline
1294 return ArrayRCP<T>(p, lowerOffset, size_in, owns_mem);
1298template<
class T,
class Dealloc_T>
1304 ,Dealloc_T dealloc,
bool owns_mem
1307 return ArrayRCP<T>(p, lowerOffset, size_in, dealloc, owns_mem);
1311template<
class T>
inline
1325template<
class T>
inline
1337template<
class T>
inline
1342 std::copy( v.begin(), v.end(), new_arcp.begin() );
1347template<
class T,
class Embedded>
1353 const Embedded &embedded,
1358 p, lowerOffset,
size,
1365template<
class T,
class Embedded>
1371 const Embedded &embedded,
1376 p, lowerOffset,
size,
1383template<
class T,
class Embedded>
1389 const Embedded &embedded,
1394 p, lowerOffset,
size, embedded, owns_mem );
1398template<
class T>
inline
1402 if (
is_null(v) || !v->size() )
1405 &(*v)[0], 0, v->size(),
1411template<
class T>
inline
1412Teuchos::ArrayRCP<const T>
1415 if (
is_null(v) || !v->size() )
1418 &(*v)[0], 0, v->size(),
1424template<
class T>
inline
1428#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
1429 return av.access_private_arcp();
1431 return arcp(av.getRawPtr(), 0, av.size(),
false);
1436template<
class T>
inline
1437Teuchos::RCP<std::vector<T> >
1444template<
class T>
inline
1445Teuchos::RCP<const std::vector<T> >
1452template<
class T>
inline
1459template<
class T>
inline
1462 return !p.is_null();
1466template<
class T>
inline
1473template<
class T>
inline
1476 return !p.is_null();
1480template<
class T1,
class T2>
1484 return p1.access_private_ptr() == p2.access_private_ptr();
1488template<
class T1,
class T2>
1492 return p1.access_private_ptr() != p2.access_private_ptr();
1496template<
class T1,
class T2>
1500 return p1.access_private_ptr() < p2.access_private_ptr();
1504template<
class T1,
class T2>
1509 return p1.access_private_ptr() <= p2.access_private_ptr();
1513template<
class T1,
class T2>
1518 return p1.access_private_ptr() > p2.access_private_ptr();
1522template<
class T1,
class T2>
1527 return p1.access_private_ptr() >= p2.access_private_ptr();
1536 return p1.access_private_ptr() - p2.access_private_ptr();
1540template<
class T2,
class T1>
1542Teuchos::ArrayRCP<T2>
1546 const int sizeOfT1 =
sizeof(T1);
1547 const int sizeOfT2 =
sizeof(T2);
1548 size_type lowerOffset2 = (p1.lowerOffset()*sizeOfT1) / sizeOfT2;
1549 size_type upperOffset2 = ((p1.upperOffset()+1)*sizeOfT1) / sizeOfT2 - 1;
1550 T2 *ptr2 =
reinterpret_cast<T2*
>(p1.get());
1552 ptr2, lowerOffset2, upperOffset2 - lowerOffset2 + 1,
1553 p1.access_private_node()
1559template<
class T2,
class T1>
1560Teuchos::ArrayRCP<T2>
1565 for (itr_t itr = arcp2.begin(); itr != arcp2.end(); ++itr) {
1566 new (&*itr) T2(val);
1569 arcp2.getRawPtr(), 0, arcp2.size(),
1578template<
class T2,
class T1>
1580Teuchos::ArrayRCP<T2>
1583 T2 *ptr2 =
const_cast<T2*
>(p1.get());
1585 ptr2, p1.lowerOffset(), p1.size(),
1586 p1.access_private_node()
1592template<
class T2,
class T1>
1594Teuchos::ArrayRCP<T2>
1597 T2 * raw_ptr2 = p1.get();
1599 raw_ptr2, p1.lowerOffset(), p1.size(),
1600 p1.access_private_node()
1606template<
class T1,
class T2>
1609 const T1 &extra_data,
const std::string& name,
1614 p->assert_not_null();
1615 p->nonconst_access_private_node().set_extra_data(
any(extra_data), name, destroy_when,
1620template<
class T1,
class T2>
1624 p.assert_not_null();
1626 p.nonconst_access_private_node().get_extra_data(
1633template<
class T1,
class T2>
1637 p.assert_not_null();
1639 p.access_private_node().get_extra_data(
1646template<
class T1,
class T2>
1650 p.assert_not_null();
1651 any *extra_data = p.nonconst_access_private_node().get_optional_extra_data(
1658template<
class T1,
class T2>
1662 p.assert_not_null();
1663 any *extra_data = p.access_private_node().get_optional_extra_data(
1670template<
class Dealloc_T,
class T>
1679template<
class Dealloc_T,
class T>
1688 p.access_private_node().node_ptr());
1694 <<
"\' does not match actual type of the node \'"
1695 <<
typeName(*p.access_private_node().node_ptr()) <<
"!"
1697 return dnode->get_nonconst_dealloc();
1701template<
class Dealloc_T,
class T>
1710template<
class Dealloc_T,
class T>
1718 RCPNT *dnode =
dynamic_cast<RCPNT*
>(p.access_private_node().node_ptr());
1725template<
class TOrig,
class Embedded,
class T>
1733template<
class TOrig,
class Embedded,
class T>
1752 if (p.access_private_ptr () == NULL) {
1755 out << (
const void*) (p.access_private_ptr ());
1758 <<
",lowerOffset="<<p.lowerOffset()
1759 <<
",upperOffset="<<p.upperOffset()
1760 <<
",size="<<p.size()
1761 <<
",node=" << p.access_private_node ()
1762 <<
",strong_count="<<p.strong_count()
1763 <<
",weak_count="<<p.weak_count()
Definition of Teuchos::as, for conversions between types.
ArcpReinterpretCastEmbeddedObj(const ArrayRCP< T1 > &arcp_pod)
~ArcpReinterpretCastEmbeddedObj()
ArcpReinterpretCastEmbeddedObj()
ArcpReinterpretCastEmbeddedObj & operator=(const ArcpReinterpretCastEmbeddedObj &arceo)
Reference-counted smart pointer for managing arrays.
T1 * get_optional_extra_data(ArrayRCP< T2 > &p, const std::string &name)
Get a pointer to non-const extra data (if it exists) associated with a ArrayRCP object.
ArrayRCP< T > create_weak() const
Create a new weak reference from another (strong) reference.
Embedded & getNonconstEmbeddedObj(const ArrayRCP< T > &p)
Get a const reference to an embedded object that was set by calling arcpWithEmbeddedObjPreDestroy(),...
ArrayRCP< T > arcpWithEmbeddedObjPostDestroy(T *p, typename ArrayRCP< T >::size_type lowerOffset, typename ArrayRCP< T >::size_type size, const Embedded &embedded, bool owns_mem=true)
Create an ArrayRCP with and also put in an embedded object.
void set_has_ownership()
Give this and other ArrayRCP<> objects ownership of the underlying referenced array to delete it.
T1 & get_extra_data(ArrayRCP< T2 > &p, const std::string &name)
Get a non-const reference to extra data associated with a ArrayRCP object.
size_type upperOffset() const
Return the upper offset to valid data.
ArrayRCP< T > & operator++()
Prefix increment of pointer (i.e. ++ptr).
Ordinal size_type
Type representing the number of elements in an ArrayRCP or view thereof.
Ordinal difference_type
Type representing the difference between two size_type values.
bool has_ownership() const
Returns true if this has ownership of object pointed to by this->get() in order to deallocate it.
T * iterator
Nonconstant iterator type used if bounds checking is disabled.
ArrayRCP< T > arcpFromArrayView(const ArrayView< T > &av)
Get an ArrayRCP object out of an ArrayView object.
ArrayRCP< T > & operator+=(size_type offset)
Pointer integer increment (i.e. ptr+=offset).
ArrayRCP(ENull null_arg=null)
Default constructor; initialize to an empty array.
bool is_null() const
True if the underlying pointer is null, else false.
ArrayRCP< T2 > arcp_reinterpret_cast(const ArrayRCP< T1 > &p1)
Reinterpret cast of underlying ArrayRCP type from T1* to T2*.
ArrayRCP< const T > getConst() const
Return object for only const access to data.
const Dealloc_T * get_optional_dealloc(const ArrayRCP< T > &p)
Return a pointer to the underlying non-const deallocator object if it exists.
size_type upperOffset_
Upper offset to the data; -1 if this array is null.
void set_extra_data(const T1 &extra_data, const std::string &name, const Ptr< ArrayRCP< T2 > > &p, EPrePostDestruction destroy_when=POST_DESTROY, bool force_unique=true)
Set extra data associated with a ArrayRCP object.
const Dealloc_T & get_dealloc(const ArrayRCP< T > &p)
Return a const reference to the underlying deallocator object.
T & operator*() const
Dereference the underlying object for the current pointer position.
const ArrayRCP< T > & assert_not_null() const
Throws NullReferenceError if this->get()==NULL, otherwise returns reference to *this.
T * release()
Release the ownership of the underlying array.
ArrayRCP< T > arcp(const RCP< Array< T > > &v)
Wrap an RCP<Array<T> > object as an ArrayRCP<T> object.
void clear()
Resize to zero.
T * get() const
Get the raw C++ pointer to the underlying object.
ArrayRCP< T2 > arcp_const_cast(const ArrayRCP< T1 > &p1)
Const cast of underlying ArrayRCP type from const T* to T*.
size_type size() const
The total number of entries in the array.
Dealloc_T * get_optional_nonconst_dealloc(const ArrayRCP< T > &p)
Return a pointer to the underlying const deallocator object if it exists.
T & operator[](size_type offset) const
Random object access.
ArrayRCP< T > create_strong() const
Create a new strong RCP object from another (weak) RCP object.
void deepCopy(const ArrayView< const T > &av)
Deep copy the elements from one ArrayView object into this object.
bool shares_resource(const ArrayRCP< T2 > &r_ptr) const
Returns true if the smart pointers share the same underlying reference-counted object.
size_type lowerOffset() const
Return the lower offset to valid data.
ArrayRCP< T > operator-(size_type offset) const
Pointer integer decrement (i.e. ptr-offset).
ArrayRCP< T > arcpWithEmbeddedObj(T *p, typename ArrayRCP< T >::size_type lowerOffset, typename ArrayRCP< T >::size_type size, const Embedded &embedded, bool owns_mem=true)
Create an ArrayRCP with and also put in an embedded object.
T * getRawPtr() const
Get the raw C++ pointer to the underlying object.
ArrayRCP< T > & operator--()
Prefix decrement of pointer (i.e. –ptr).
ArrayView< T > operator()() const
Return a nonpersisting view of *this.
ArrayView< T > view(size_type lowerOffset, size_type size) const
Return a nonpersisting view of a contiguous range of elements.
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...
int strong_count() const
Return the number of active RCP<> objects that have a "strong" reference to the underlying reference-...
ArrayRCP(const T1 *p, size_type lowerOffset_in, size_type size_in, bool has_ownership_in, const ERCPNodeLookup rcpNodeLookup)
ArrayRCP< T > persistingView(size_type lowerOffset, size_type size) const
Return a persisting view of a contiguous range of elements.
RCPNodeHandle node_
Reference-counting machinery.
T * ptr_
Raw pointer to the array; NULL if this array is null.
bool is_valid_ptr() const
Return whether the underlying object pointer is still valid.
void resize(const size_type n, const T &val=T())
Resize and append new elements if necessary.
ArrayRCP< T > arcpCloneNode(const ArrayRCP< T > &a)
Allocate a new ArrayRCP object with a new RCPNode with memory pointing to the initial node.
void debug_assert_valid_ptr() const
void debug_assert_in_range(size_type lowerOffset_in, size_type size_in) const
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 increment (i.e. ptr+offset).
ArrayRCP< T2 > arcp_reinterpret_cast_nonpod(const ArrayRCP< T1 > &p1, const T2 &val=T2())
Reinterpret cast of underlying ArrayRCP type from T1* to T2* where T2 is a non-POD (non-plain-old-dat...
void assign(size_type n, const T &val)
Resize and assign n elements of val.
iterator begin() const
Return an iterator to beginning of the array of data.
T * operator->() const
Pointer (->) access to members of underlying object for current position.
size_type lowerOffset_
Lower offset to the data; 0 if this array is null.
~ArrayRCP()
Destructor, that decrements the reference count.
ERCPStrength strength() const
Strength of the pointer.
ArrayRCP< T > arcpClone(const ArrayView< const T > &v)
Allocate a new array by cloning data from an input array view.
Dealloc_T & get_nonconst_dealloc(const ArrayRCP< T > &p)
Return a non-const reference to the underlying deallocator object.
iterator end() const
Return an iterator to past the end of the array of data.
RCP< std::vector< T > > get_std_vector(const ArrayRCP< T > &ptr)
Get an std::vector<T> object out of an ArrayRCP<T> object that was created using the arcp() function ...
ArrayRCP< T2 > arcp_implicit_cast(const ArrayRCP< T1 > &p1)
Implicit case the underlying ArrayRCP type from T1* to T2*.
ArrayRCP< T > arcpWithEmbeddedObjPreDestroy(T *p, typename ArrayRCP< T >::size_type lowerOffset, typename ArrayRCP< T >::size_type size, const Embedded &embedded, bool owns_mem=true)
Create an ArrayRCP with and also put in an embedded object.
const ArrayRCP< T > & assert_valid_ptr() const
If the object pointer is non-null, assert that it is still valid.
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...
const Embedded & getEmbeddedObj(const ArrayRCP< T > &p)
Get a const reference to an embedded object that was set by calling arcpWithEmbeddedObjPreDestroy(),...
int total_count() const
Total count (strong_count() + weak_count()).
iterator end() const
Return an iterator to past the end of the array of data.
iterator begin() const
Return an iterator to beginning of the array of data.
size_type size() const
The total number of items in the managed array.
ArrayView< T > arrayView(T *p, typename ArrayView< T >::size_type size)
Construct a const or non-const view to const or non-const data.
int size(const Comm< Ordinal > &comm)
Get the number of processes in the communicator.
Deallocator class that uses delete [] to delete memory allocated uisng new [].
A deallocator class that wraps a simple value object and delegates to another deallocator object.
EmbeddedObjDealloc< T, Embedded, DeallocArrayDelete< T > > embeddedObjDeallocArrayDelete(const Embedded &embedded, EPrePostDestruction prePostDestroy)
Create a dealocator with an embedded object using delete [].
Embedded & getNonconstObj()
const Embedded & getObj() const
Incompatiable iterators error exception class.
Null reference error exception class.
Simple wrapper class for raw pointers to single objects where no persisting relationship exists.
Ptr< T > ptr(T *p)
Create a pointer to an object from a raw pointer.
Handle class that manages the RCPNode's reference counting.
RCPNodeHandle create_strong() const
Return a strong handle.
RCPNodeHandle create_weak() const
Return a weak handle.
int total_count() const
The sum of the weak and string counts.
void assert_valid_ptr(const RCPType &rcp_obj) const
ERCPStrength strength() const
The strength of this handle.
int weak_count() const
The weak count for this RCPNode, or 0 if the node is NULL.
void has_ownership(bool has_ownership_in)
bool is_valid_ptr() const
Whether the underlying pointer is valid.
int strong_count() const
The strong count for this RCPNode, or 0 if the node is NULL.
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.
Deletes a (non-owning) RCPNode but not it's underlying object in case of a throw.
void release()
Releaes the RCPNode pointer before the destructor is called.
Templated implementation class of RCPNode that has the responsibility for deleting the reference-coun...
Dealloc_T & get_nonconst_dealloc()
static RCPNode * getExistingRCPNode(T *p)
Return a raw pointer to an existing owning RCPNode given the address to the underlying object if it e...
Node class to keep track of address and the reference count for a reference-counted utility class and...
TEUCHOSCORE_LIB_DLL_EXPORT void throw_null_ptr_error(const std::string &type_name)
Throw that a pointer passed into an RCP object is null.
Smart reference counting pointer class for automatic garbage collection.
Range error exception class.
Default traits class that just returns typeid(T).name().
static std::string name()
Modified boost::any class, which is a container for a templated value.
bool operator!=(const any &a, const any &b)
Returns true if two any objects do not have the same value.
ValueType & any_cast(any &operand)
Used to extract the templated value held in Teuchos::any to a given value type.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
This macro is designed to be a short version of TEUCHOS_TEST_FOR_EXCEPTION() that is easier to call.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
#define TEUCHOS_ASSERT_INEQUALITY(val1, comp, val2)
This macro is checks that an inequality between two numbers is satisified and if not then throws a go...
#define TEUCHOS_ASSERT_EQUALITY(val1, val2)
This macro is checks that to numbers are equal and if not then throws an exception with a good error ...
bool is_null(const std::shared_ptr< T > &p)
Returns true if p.get()==NULL.
bool nonnull(const std::shared_ptr< T > &p)
Returns true if p.get()!=NULL.
void assert_shares_resource(const ArrayRCP< T1 > &p1, const ArrayRCP< T2 > &p2)
ERCPStrength
Used to specify if the pointer is weak or strong.
std::string typeName(const T &t)
Template function for returning the concrete type name of a passed-in object.
bool operator>=(BigUInt< n > const &a, BigUInt< n > const &b)
std::string concreteTypeName(const T &t)
Template function for returning the type name of the actual concrete name of a passed-in object.
std::ostream & operator<<(std::ostream &os, BigUInt< n > a)
bool operator<(BigUInt< n > const &a, BigUInt< n > const &b)
ERCPNodeLookup
Used to determine if RCPNode lookup is performed or not.
RCPNode * ArrayRCP_createNewDeallocRCPNodeRawPtr(T *p, Dealloc_T dealloc, bool has_ownership_in)
BigUInt< n > operator-(BigUInt< n > const &a, BigUInt< n > const &b)
bool operator<=(BigUInt< n > const &a, BigUInt< n > const &b)
RCPNode * ArrayRCP_createNewRCPNodeRawPtr(T *p, bool has_ownership_in)
EPrePostDestruction
Used to specify a pre or post destruction of extra data.
bool operator==(BigUInt< n > const &a, BigUInt< n > const &b)
bool operator>(BigUInt< n > const &a, BigUInt< n > const &b)