예제 #1
0
template<class T> inline
T* ArrayRCP<T>::release()
{
  debug_assert_valid_ptr();
  node_.has_ownership(false);
  return ptr_;
}
예제 #2
0
template<class T> inline
T* Ptr<T>::operator->() const
{
  debug_assert_not_null();
  debug_assert_valid_ptr();
  return ptr_;
}
예제 #3
0
template<class T> inline
typename ArrayRCP<T>::size_type
ArrayRCP<T>::size() const
{
  debug_assert_valid_ptr();
  return upperOffset_ - lowerOffset_ + 1;
}
예제 #4
0
template<class T> inline
T& ArrayRCP<T>::operator[](size_type offset) const
{
  debug_assert_valid_ptr();
  debug_assert_in_range(offset,1);
  return ptr_[offset];
}
예제 #5
0
template<class T> inline
T& ArrayRCP<T>::operator*() const
{
  debug_assert_valid_ptr();
  debug_assert_in_range(0,1);
  return *ptr_;
}
예제 #6
0
template<class T> inline
ArrayRCP<T> ArrayRCP<T>::operator--(int)
{
  debug_assert_valid_ptr();
  ArrayRCP<T> r_ptr = *this;
  --(*this);
  return r_ptr;
}
예제 #7
0
template<class T> inline
ArrayRCP<T>& ArrayRCP<T>::operator-=(size_type offset)
{
  debug_assert_valid_ptr();
  ptr_ -= offset;
  lowerOffset_ += offset;
  upperOffset_ += offset;
  return *this;
}
예제 #8
0
template<class T> inline
ArrayRCP<T>& ArrayRCP<T>::operator--()
{
  debug_assert_valid_ptr();
  --ptr_;
  ++lowerOffset_;
  ++upperOffset_;
  return *this;
}
예제 #9
0
template<class T> inline
T* ArrayRCP<T>::get() const
{
  if(ptr_) {
    debug_assert_valid_ptr();
    debug_assert_in_range(0,1);
  }
  return ptr_;
}
예제 #10
0
template<class T> inline
ArrayRCP<const T> ArrayRCP<T>::getConst() const
{
  if (ptr_) {
    debug_assert_valid_ptr();
    const T *cptr = ptr_; // Will not compile if not legal!
    return ArrayRCP<const T>(cptr, lowerOffset_, size(), node_);
  }
  return null;
}
예제 #11
0
template<class T> inline
typename ArrayRCP<T>::iterator ArrayRCP<T>::end() const
{
  debug_assert_valid_ptr();
#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
  return *this + (upperOffset_ + 1);
#else
  return ptr_ + (upperOffset_ + 1);
#endif
}
예제 #12
0
template<class T> inline
ArrayView<T> ArrayRCP<T>::view( size_type lowerOffset_in, size_type size_in ) const
{
  debug_assert_valid_ptr();
  debug_assert_in_range(lowerOffset_in,size_in);
#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
  return ArrayView<T>(persistingView(lowerOffset_in, size_in).create_weak());
#else
  return arrayView(ptr_ + lowerOffset_in, size_in);
#endif
  // ToDo: Implement checks for dangling references!
}
예제 #13
0
template<class T> inline
ArrayRCP<T>
ArrayRCP<T>::persistingView( size_type lowerOffset_in, size_type size_in ) const
{
  debug_assert_valid_ptr();
  debug_assert_in_range(lowerOffset_in, size_in);
  ArrayRCP<T> ptr = *this;
  ptr.ptr_ = ptr.ptr_ + lowerOffset_in;
  ptr.lowerOffset_ = 0;
  ptr.upperOffset_ = size_in - 1;
  return ptr;
}
예제 #14
0
template<class T> inline
T* Ptr<T>::get() const
{
  debug_assert_valid_ptr();
  return ptr_;
}
예제 #15
0
template<class T> inline
ArrayRCP<T> ArrayRCP<T>::create_strong() const
{
  debug_assert_valid_ptr();
  return ArrayRCP<T>(ptr_, lowerOffset_, size(), node_.create_strong());
}