42 #ifndef TEUCHOS_ARRAY_H 43 #define TEUCHOS_ARRAY_H 50 #include "Teuchos_Assert.hpp" 52 #include "Teuchos_ArrayRCP.hpp" 53 #include "Teuchos_Tuple.hpp" 55 #include "Teuchos_Assert.hpp" 57 #if defined(HAVE_TEUCHOSCORE_CXX11) && defined(HAVE_TEUCHOS_ARRAY_BOUNDSCHECK) && defined(HAVE_TEUCHOS_THREAD_SAFE) && !defined(REMOVE_THREAD_PROTECTION_FOR_ARRAY) 59 #define USE_MUTEX_LOCK_FOR_ARRAY 72 template<
typename T>
class Array;
88 template<
typename T>
inline 96 template<
typename T>
inline 104 template<
typename T>
inline 112 template<
typename T>
inline 113 bool operator<( const Array<T> &a1,
const Array<T> &a2 );
120 template<
typename T>
inline 121 bool operator<=( const Array<T> &a1,
const Array<T> &a2 );
128 template<
typename T>
inline 136 template<
typename T>
inline 204 template<
typename T2>
208 template<
typename T2>
212 template<
typename T2>
216 template<
typename T2>
217 friend bool Teuchos::operator<( const Array<T2> &a1,
const Array<T2> &a2 );
220 template<
typename T2>
221 friend bool Teuchos::operator<=( const Array<T2> &a1,
const Array<T2> &a2 );
224 template<
typename T2>
228 template<
typename T2>
243 typedef typename std::vector<T>::pointer
pointer;
253 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 263 typedef typename std::vector<T>::iterator
iterator;
287 template<
typename InputIterator>
288 inline Array(InputIterator first, InputIterator last);
314 template<
typename InputIterator>
315 inline void assign(InputIterator first, InputIterator last);
341 inline bool empty()
const;
369 template<
typename InputIterator>
370 inline void insert(
iterator position, InputIterator first, InputIterator last);
393 inline void remove(
int i);
399 inline int length()
const;
402 inline std::string
toString()
const;
421 inline const T*
data()
const;
428 inline Array(
const std::vector<T> &v );
431 inline std::vector<T>
toVector()
const;
507 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 511 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 512 mutable std::mutex mutex_lock;
518 inline std::vector<T>& vec(
519 bool isStructureBeingModified =
false,
520 bool activeIter =
false 523 inline const std::vector<T>& vec()
const;
525 inline typename std::vector<T>::iterator
528 inline void assertIndex(
size_type i)
const;
530 inline void assertNotNull()
const;
543 if (
is_null(v) || !v->size() )
545 return arcpWithEmbeddedObjPostDestroy<T,RCP<Array<T> > >(
546 &(*v)[0], 0, v->size(),
560 if (
is_null(v) || !v->size() )
562 return arcpWithEmbeddedObjPostDestroy<const T,RCP<const Array<T> > >(
563 &(*v)[0], 0, v->size(),
618 std::ostream& operator<<(std::ostream& os, const Array<T>& array);
625 template<
typename T>
inline 626 int hashCode(
const Array<T>& array);
635 template<
typename T>
inline 636 std::vector<T> createVector(
const Array<T> &a );
644 std::string toString(
const Array<T>& array);
699 Array<T> fromStringToArray(
const std::string& arrayStr);
707 std::istringstream& operator>> (std::istringstream& in,
Array<T>& array){
708 array = fromStringToArray<T>(in.str());
717 template<
typename T>
inline 772 static std::string name(){
773 std::string formatString = getArrayTypeNameTraitsFormat();
774 size_t starPos = formatString.find(
"*");
775 std::string prefix = formatString.substr(0,starPos);
776 std::string postFix = formatString.substr(starPos+1);
779 static std::string concreteName(
const Array<T>&)
798 template<
typename T>
inline 800 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 801 : vec_(
rcp(
new std::vector<T>()))
806 template<
typename T>
inline 808 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
809 vec_(
rcp(new std::vector<T>(n,value)))
816 template<
typename T>
inline 818 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
819 vec_(
rcp(new std::vector<T>(*x.vec_)))
826 template<
typename T>
template<
typename InputIterator>
inline 828 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
829 vec_(
rcp(new std::vector<T>(first, last)))
836 template<
typename T>
inline 841 template<
typename T>
inline 843 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 844 : vec_(
rcp(
new std::vector<T>()))
847 insert(begin(), a.begin(), a.end());
855 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 856 : vec_(
rcp(
new std::vector<T>()))
859 insert(begin(), t.
begin(), t.
end());
863 template<
typename T>
inline 866 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 867 std::lock_guard<std::mutex> lockGuard(mutex_lock);
877 template<
typename T>
inline 880 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 881 std::lock_guard<std::mutex> lockGuard(mutex_lock);
883 vec(
true).assign(n,val);
887 template<
typename T>
template<
typename InputIterator>
inline 890 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 891 std::lock_guard<std::mutex> lockGuard(mutex_lock);
893 vec(
true).assign(first,last);
897 template<
typename T>
inline 901 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 903 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 904 std::lock_guard<std::mutex> lockGuard(mutex_lock);
909 extern_arcp_ =
arcp(vec_);
914 return extern_arcp_.create_weak();
916 return vec().begin();
921 template<
typename T>
inline 925 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 926 return begin() +
size();
932 template<
typename T>
inline 936 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 938 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 939 std::lock_guard<std::mutex> lockGuard(mutex_lock);
949 extern_arcp_ =
arcp(vec_);
953 extern_carcp_ = extern_arcp_.create_weak();
958 return extern_carcp_.create_weak();
960 return vec().begin();
965 template<
typename T>
inline 969 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 970 return begin() +
size();
977 template<
typename T>
inline 981 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 984 return vec().rbegin();
989 template<
typename T>
inline 993 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1001 template<
typename T>
inline 1005 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1008 return vec().rbegin();
1013 template<
typename T>
inline 1017 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1020 return vec().rend();
1025 template<
typename T>
inline 1029 return vec().
size();
1033 template<
typename T>
inline 1037 return std::numeric_limits<size_type>::max();
1041 template<
typename T>
inline 1045 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1046 std::lock_guard<std::mutex> lockGuard(mutex_lock);
1048 vec(
true).resize(new_size,x);
1052 template<
typename T>
inline 1060 template<
typename T>
inline 1063 return vec().
empty();
1067 template<
typename T>
inline 1070 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1071 std::lock_guard<std::mutex> lockGuard(mutex_lock);
1073 vec(
true).reserve(n);
1077 template<
typename T>
inline 1081 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1088 template<
typename T>
inline 1092 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1099 template<
typename T>
inline 1103 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1110 template<
typename T>
inline 1114 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1121 template<
typename T>
inline 1125 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1128 return vec().front();
1132 template<
typename T>
inline 1136 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1139 return vec().front();
1143 template<
typename T>
inline 1147 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1150 return vec().back();
1154 template<
typename T>
inline 1158 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1161 return vec().back();
1165 template<
typename T>
inline 1168 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1169 std::lock_guard<std::mutex> lockGuard(mutex_lock);
1171 vec(
true).push_back(x);
1175 template<
typename T>
inline 1178 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1181 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1182 std::lock_guard<std::mutex> lockGuard(mutex_lock);
1184 vec(
true).pop_back();
1200 template<
typename T>
inline 1204 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1206 const typename std::vector<T>::iterator raw_poss = raw_position(position);
1208 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1210 std::lock_guard<std::mutex> lockGuard(mutex_lock);
1212 vec(
true,
true).insert(raw_poss, x);
1213 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1218 return vec_.insert(position, x);
1223 template<
typename T>
inline 1226 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1227 const typename std::vector<T>::iterator raw_poss = raw_position(position);
1228 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1229 std::lock_guard<std::mutex> lockGuard(mutex_lock);
1231 vec(
true,
true).insert(raw_poss, n, x);
1233 vec_.insert(position, n, x);
1238 template<
typename T>
template<
typename InputIterator>
inline 1241 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1242 const typename std::vector<T>::iterator raw_poss = raw_position(position);
1243 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1244 std::lock_guard<std::mutex> lockGuard(mutex_lock);
1246 vec(
true,
true).insert(raw_poss, first, last);
1248 vec_.insert(position, first, last);
1253 template<
typename T>
inline 1257 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1260 const typename std::vector<T>::iterator raw_poss = raw_position(position);
1262 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1264 std::lock_guard<std::mutex> lockGuard(mutex_lock);
1266 vec(
true,
true).erase(raw_poss);
1267 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1272 return vec_.erase(position);
1277 template<
typename T>
inline 1281 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1289 const typename std::vector<T>::iterator raw_first = raw_position(first);
1290 const typename std::vector<T>::iterator raw_last = raw_position(last);
1292 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1294 std::lock_guard<std::mutex> lockGuard(mutex_lock);
1296 vec(
true,
true).erase(raw_first,raw_last);
1297 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1302 return vec_.erase(first,last);
1307 template<
typename T>
inline 1310 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1311 std::lock_guard<std::mutex> lockGuard(mutex_lock);
1313 vec(
true).swap(x.vec());
1317 template<
typename T>
inline 1320 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1321 std::lock_guard<std::mutex> lockGuard(mutex_lock);
1330 template<
typename T>
inline 1338 template<
typename T>
inline 1341 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1345 this->erase( this->begin() + i );
1349 template<
typename T>
inline 1352 return static_cast<int> (this->
size ());
1356 template<
typename T>
inline 1363 template<
typename T>
inline 1366 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1374 template<
typename T>
inline 1377 return (
size() ? &(*
this)[0] :
nullptr );
1380 template<
typename T>
inline 1383 return (
size() ? &(*
this)[0] :
nullptr );
1386 template<
typename T>
inline 1389 return (
size() ? &(*
this)[0] :
nullptr );
1392 template<
typename T>
inline 1395 return (
size() ? &(*
this)[0] :
nullptr );
1401 template<
typename T>
inline 1403 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
1404 vec_(new std::vector<T>(v))
1411 template<
typename T>
inline 1415 return std::vector<T>();
1416 std::vector<T> v(begin(),end());
1421 template<
typename T>
inline 1424 #ifdef USE_MUTEX_LOCK_FOR_ARRAY 1425 std::lock_guard<std::mutex> lockGuard(mutex_lock);
1435 template<
typename T>
inline 1439 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1440 return ArrayView<T>(this->begin().persistingView(offset, size_in));
1442 return arrayView( &vec()[offset], size_in );
1445 return Teuchos::null;
1449 template<
typename T>
inline 1453 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1456 return arrayView( &vec()[offset], size_in );
1459 return Teuchos::null;
1466 template<
typename T>
inline 1469 return view(offset, size_in);
1473 template<
typename T>
inline 1476 return view(offset, size_in);
1480 template<
typename T>
inline 1485 return this->view(0,
size());
1489 template<
typename T>
inline 1494 return this->view(0,
size());
1498 template<
typename T>
inline 1501 return this->operator()();
1505 template<
typename T>
inline 1508 return this->operator()();
1515 template<
typename T>
1517 Array<T>::vec(
bool isStructureBeingModified,
bool activeIter )
1519 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1521 if (isStructureBeingModified) {
1529 extern_arcp_ = null;
1530 extern_carcp_ = null;
1535 (void)isStructureBeingModified;
1542 template<
typename T>
inline 1543 const std::vector<T>&
1544 Array<T>::vec()
const 1546 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1554 template<
typename T>
inline 1555 typename std::vector<T>::iterator
1556 Array<T>::raw_position( iterator position )
1558 #ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK 1559 const iterator first = this->begin();
1560 const iterator last = this->end();
1562 !(first <= position && position <= last), DanglingReferenceError,
1563 "Error, this iterator is no longer valid for this Aray!" 1568 return vec_->begin() + (position - this->begin());
1575 template<
typename T>
inline 1576 void Array<T>::assertIndex(size_type i)
const 1579 !( 0 <= i && i <
size() ), RangeError,
1580 "Array<T>::assertIndex(i): i="<<i<<
" out of range [0, "<<
size() <<
")" 1585 template<
typename T>
inline 1586 void Array<T>::assertNotNull()
const 1589 !
size(), NullReferenceError,
1590 typeName(*
this)<<
"::assertNotNull(): " 1591 "Error, the array has size zero!" 1602 template<
typename T>
inline 1603 bool Teuchos::operator==(
const Array<T> &a1,
const Array<T> &a2 )
1604 {
return (a1.vec() == a2.vec()); }
1607 template<
typename T>
inline 1608 bool Teuchos::operator!=(
const Array<T> &a1,
const Array<T> &a2 )
1609 {
return (a1.vec() != a2.vec()); }
1612 template<
typename T>
inline 1613 void Teuchos::swap( Array<T> &a1, Array<T> &a2 )
1617 template<
typename T>
inline 1618 bool Teuchos::operator<( const Array<T> &a1,
const Array<T> &a2 )
1619 {
return (a1.vec() < a2.vec()); }
1622 template<
typename T>
inline 1623 bool Teuchos::operator<=( const Array<T> &a1,
const Array<T> &a2 )
1624 {
return (a1.vec() <= a2.vec()); }
1627 template<
typename T>
inline 1628 bool Teuchos::operator>(
const Array<T> &a1,
const Array<T> &a2 )
1629 {
return (a1.vec() > a2.vec()); }
1632 template<
typename T>
inline 1633 bool Teuchos::operator>=(
const Array<T> &a1,
const Array<T> &a2 )
1634 {
return (a1.vec() >= a2.vec()); }
1637 template<
typename T>
inline 1638 std::ostream& Teuchos::operator<<(
1639 std::ostream& os,
const Array<T>& array
1642 return os << Teuchos::toString(array);
1646 template<
typename T>
inline 1647 int Teuchos::hashCode(
const Array<T>& array)
1649 int rtn =
hashCode(array.length());
1650 for (
int i=0; i<array.length(); i++)
1659 size_t maxIntBeforeWrap = std::numeric_limits<int>::max();
1660 maxIntBeforeWrap ++;
1661 rtn += maxIntBeforeWrap;
1667 template<
typename T>
inline 1668 std::vector<T> Teuchos::createVector(
const Array<T> &a )
1670 return a.toVector();
1674 template<
typename T>
inline 1675 std::string Teuchos::toString(
const Array<T>& array)
1677 return array.toString();
1681 template<
typename T>
1683 Teuchos::fromStringToArray(
const std::string& arrayStr)
1685 const std::string str = Utils::trimWhiteSpace(arrayStr);
1686 std::istringstream iss(str);
1688 ( str[0]!=
'{' || str[str.length()-1] !=
'}' )
1689 ,InvalidArrayStringRepresentation
1690 ,
"Error, the std::string:\n" 1694 "is not a valid array represntation!" 1701 while( !iss.eof() ) {
1703 std::string entryStr;
1704 std::getline(iss,entryStr,
',');
1713 entryStr = Utils::trimWhiteSpace(entryStr);
1715 0 == entryStr.length(),
1716 InvalidArrayStringRepresentation,
1717 "Error, the std::string:\n" 1721 "is not a valid array represntation because it has an empty array entry!" 1725 bool found_end =
false;
1726 if(entryStr[entryStr.length()-1]==
'}') {
1727 entryStr = entryStr.substr(0,entryStr.length()-1);
1729 if( entryStr.length()==0 && a.size()==0 )
1733 std::istringstream entryiss(entryStr);
1735 Teuchos::extractDataFromISS( entryiss, entry );
1744 found_end && !iss.eof()
1745 ,InvalidArrayStringRepresentation
1746 ,
"Error, the std::string:\n" 1750 "is not a valid array represntation!" 1757 #endif // TEUCHOS_ARRAY_H
RCP< T > rcp(const boost::shared_ptr< T > &sptr)
Conversion function that takes in a boost::shared_ptr object and spits out a Teuchos::RCP object...
ArrayView< T > arrayView(T *p, typename ArrayView< T >::size_type size)
Construct a const or non-const view to const or non-const data.
void reserve(size_type n)
int hashCode(const Array< T > &array)
Return the hash code.
Array< T > & append(const T &x)
Add a new entry at the end of the array.
Partial specialization of ArrayRCP for const T.
static bool hasBoundsChecking()
Return true if Array has been compiled with boundschecking on.
std::vector< T > toVector() const
Explicit copy conversion to an std::vector.
ArrayView< T > view(size_type offset, size_type size)
Return non-const view of a contiguous range of elements.
bool is_null(const std::shared_ptr< T > &p)
Returns true if p.get()==NULL.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
std::vector< T >::value_type value_type
The type of an entry of the Array; for compatibility with std::vector.
void extractDataFromISS(std::istringstream &iss, std::string &data)
Extracts std::string data from an istringstream object.
Teuchos header file which uses auto-configuration information to include necessary C++ headers...
iterator erase(iterator position)
ArrayRCP< T > arcp(const RCP< Array< T > > &v)
Wrap an RCP<Array<T> > object as an ArrayRCP<T> object.
Array & operator=(const Array< T > &a)
Assignment operator (does a deep copy).
T * getRawPtr()
Return a raw pointer to beginning of array or NULL if unsized.
std::vector< T >::const_pointer const_pointer
The type of a const pointer to T; for compatibility with std::vector.
ArrayRCP< T > arcpFromArray(Array< T > &a)
Wrap an Array<T> object as a non-owning ArrayRCP<T> object.
bool is_null(const ArrayRCP< T > &p)
Returns true if p.get()==NULL.
ArrayRCP< const T > arcp(const RCP< const Array< T > > &v)
Wrap a RCP<const Array<T> > object as an ArrayRCP<const T> object.
std::string toString(const any &rhs)
Converts the value in any to a std::string.
iterator begin() const
Return an iterator to beginning of the array of data.
static std::string trimWhiteSpace(const std::string &str)
Trim whitespace from beginning and end of std::string.
Statically sized simple array (tuple) class.
Ordinal size_type
The type of Array sizes and capacities.
int length() const
Return number of elements in the array.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
Ordinal difference_type
The type of the difference between two size_type values.
T * data()
Return a raw pointer to beginning of array.
ArrayRCP< const T > arcpFromArray(const Array< T > &a)
Wrap a const Array<T> object as a non-owning ArrayRCP<T> object.
size_type capacity() const
std::string getArrayTypeNameTraitsFormat()
Get the format that is used for the specialization of the TypeName traits class for Array...
friend void swap(Array< T2 > &a1, Array< T2 > &a2)
void resize(size_type new_size, const value_type &x=value_type())
int size(const Comm< Ordinal > &comm)
Get the number of processes in the communicator.
Teuchos_Ordinal Ordinal
The type of indices.
std::vector< T >::reference reference
The type of a reference to T; for compatibility with std::vector.
std::vector< T >::pointer pointer
The type of a pointer to T; for compatibility with std::vector.
size_type max_size() const
std::vector< T >::const_iterator const_iterator
The type of a const forward iterator.
reverse_iterator rbegin()
std::vector< T >::const_reference const_reference
The type of a const reference to T; for compatibility with std::vector.
void push_back(const value_type &x)
Default traits class that just returns typeid(T).name().
void extractDataFromISS(std::istringstream &iss, T &data)
Extracts data from an istringstream object.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos, as well as a number of utility routines.
std::vector< T >::const_reverse_iterator const_reverse_iterator
The type of a const reverse iterator.
std::string toString() const
Convert an Array to an std::string
std::vector< T >::allocator_type allocator_type
The allocator type; for compatibility with std::vector.
ArrayView< T > operator()()
Return an non-const ArrayView of *this.
reference at(size_type i)
Smart reference counting pointer class for automatic garbage collection.
friend bool Teuchos::operator!=(const Array< T2 > &a1, const Array< T2 > &a2)
reference operator[](size_type i)
Partial specialization of ArrayView for const T.
#define TEUCHOS_ASSERT(assertion_test)
This macro is throws when an assert fails.
void assign(size_type n, const value_type &val)
iterator end() const
Return an iterator to past the end of the array of data.
Array()
Default constructor; creates an empty Array.
std::vector< T >::iterator iterator
The type of a forward iterator.
A utilities class for Teuchos.
iterator insert(iterator position, const value_type &x)
Defines basic traits returning the name of a type in a portable and readable way. ...
std::vector< T >::reverse_iterator reverse_iterator
The type of a reverse iterator.
#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...
static std::string name()
std::string typeName(const T &t)
Template function for returning the concrete type name of a passed-in object.
Reference-counted smart pointer for managing arrays.
Replacement for std::vector that is compatible with the Teuchos Memory Management classes...