3#ifndef DUNE_ISTL_BASEARRAY_HH
4#define DUNE_ISTL_BASEARRAY_HH
48 template<
class B,
class A=std::allocator<B> >
49 class base_array_unmanaged
56 typedef B member_type;
59 typedef A allocator_type;
62 typedef typename A::size_type size_type;
68 using const_reference =
const B&;
73 reference operator[] (size_type i)
75#ifdef DUNE_ISTL_WITH_CHECKING
76 if (i>=n)
DUNE_THROW(ISTLError,
"index out of range");
82 const_reference operator[] (size_type i)
const
84#ifdef DUNE_ISTL_WITH_CHECKING
85 if (i>=n)
DUNE_THROW(ISTLError,
"index out of range");
93 :
public RandomAccessIteratorFacade<RealIterator<T>, T>
99 friend class RandomAccessIteratorFacade<RealIterator<const ValueType>, const ValueType>;
100 friend class RandomAccessIteratorFacade<RealIterator<ValueType>, ValueType>;
101 friend class RealIterator<const ValueType>;
102 friend class RealIterator<ValueType>;
109 RealIterator (
const B* _p, B* _i) : p(_p), i(_i)
112 RealIterator(
const RealIterator<ValueType>& it)
117 size_type
index ()
const
123 bool equals (
const RealIterator<ValueType>& other)
const
130 bool equals (
const RealIterator<const ValueType>& other)
const
212 typedef RealIterator<const B> const_iterator;
215 const_iterator
begin ()
const
217 return const_iterator(p,p+0);
221 const_iterator
end ()
const
223 return const_iterator(p,p+n);
230 return const_iterator(p,p+n-1);
237 return const_iterator(p,p-1);
241 const_iterator
find (size_type i)
const
243 return const_iterator(p,p+
std::min(i,n));
250 size_type
size ()
const
256 const B*
data()
const
269 base_array_unmanaged ()
273 base_array_unmanaged (size_type n_, B* p_)
303 template<
class B,
class A=std::allocator<B> >
304 class compressed_base_array_unmanaged
311 typedef B member_type;
314 typedef A allocator_type;
317 typedef typename A::size_type size_type;
320 using reference = B&;
323 using const_reference =
const B&;
328 reference operator[] (size_type i)
331 if (lb == j+n || *lb != i)
332 DUNE_THROW(ISTLError,
"index "<<i<<
" not in compressed array");
337 const_reference operator[] (size_type i)
const
340 if (lb == j+n || *lb != i)
341 DUNE_THROW(ISTLError,
"index "<<i<<
" not in compressed array");
348 :
public BidirectionalIteratorFacade<RealIterator<T>, T>
354 friend class BidirectionalIteratorFacade<RealIterator<const ValueType>, const ValueType>;
355 friend class BidirectionalIteratorFacade<RealIterator<ValueType>, ValueType>;
356 friend class RealIterator<const ValueType>;
357 friend class RealIterator<ValueType>;
365 RealIterator (B* _p, size_type* _j, size_type _i)
366 : p(_p), j(_j), i(_i)
372 RealIterator(
const RealIterator<ValueType>& it)
373 : p(it.p), j(it.j), i(it.i)
378 bool equals (
const RealIterator<ValueType>& it)
const
385 bool equals (
const RealIterator<const ValueType>& it)
const
393 size_type
index ()
const
399 void setindex (size_type k)
411 size_type offset ()
const
473 return (lb != j+n && *lb == i)
479 typedef RealIterator<const B> const_iterator;
482 const_iterator
begin ()
const
484 return const_iterator(p,j,0);
488 const_iterator
end ()
const
490 return const_iterator(p,j,n);
497 return const_iterator(p,j,n-1);
504 return const_iterator(p,j,-1);
508 const_iterator
find (size_type i)
const
511 return (lb != j+n && *lb == i)
512 ? const_iterator(p,j,lb-j)
519 size_type
size ()
const
526 compressed_base_array_unmanaged ()
bool equals(const SLListConstIterator< T, A > &other) const
reference elementAt(size_type i) const
void advance(difference_type n)
difference_type distanceTo(const ArrayListIterator< T, N, A > &other) const
std::ptrdiff_t index() const
iterator(ParallelIndexSet< TG, TL, N > &indexSet, const Father &father)