pr16688.c
来自「Mac OS X 10.4.9 for x86 Source Code gcc」· C语言 代码 · 共 274 行
C
274 行
/* PR 16688. Test provided by Wolfgang Bangerth. The alias analyzer was aborting when trying to group aliases. *//* { dg-do compile } *//* { dg-options "-O2" } */template<typename _Tp>struct iterator_traits;template<typename _Tp>struct iterator_traits<_Tp*> { typedef _Tp& reference;};template<typename _Iterator> struct NI { _Iterator current; typedef typename iterator_traits<_Iterator>::reference reference; NI() { } NI(const _Iterator& __i) : current(__i) { } reference operator*() const { return *current; } NI& operator++() { return *this; } const _Iterator& base() const { return current; }};template<typename _IteratorL, typename _IteratorR>inline intoperator-(const NI<_IteratorL>& __lhs, const NI<_IteratorR>& __rhs){ return __lhs.base() - __rhs.base(); }template<typename _II, typename _OI>inline _OI__copy_aux(_II __first, _II __last, _OI __result){ struct __copy { static _OI copy(_II __first, _II __last, _OI __result) { for (; __first != __last; ++__result, ++__first) *__result = *__first; return __result; } }; return __copy::copy(__first, __last, __result);}struct __copy_normal{ template<typename _II, typename _OI> static _OI copy_n(_II __first, _II __last, _OI __result) { return __copy_aux(__first, __last, __result); }};template<typename _InputIterator, typename _OutputIterator>inline _OutputIteratorcopy(_InputIterator __first, _InputIterator __last, _OutputIterator __result){ return __copy_normal::copy_n(__first, __last, __result);}template <typename T, typename U, typename V>void uninitialized_fill_n(T,U,V);template<typename _Tp>struct _Vector_base { struct _Vector_impl { _Tp* start; _Tp* finish; _Tp* end_of_storage; _Vector_impl() : start(0), finish(0), end_of_storage(0) { } } impl; _Vector_base(unsigned __n) { impl.start = allocate(__n); impl.finish = impl.start; impl.end_of_storage = impl.start + __n; } ~_Vector_base() { deallocate(impl.start, impl.end_of_storage - impl.start); } _Tp* allocate(unsigned __n); void deallocate(_Tp* __p, unsigned __n); NI<_Tp*> begin() { return NI<_Tp*> (impl.start); }};template<typename _Tp>struct vector : _Vector_base<_Tp>{ vector(int __n) : _Vector_base<_Tp>(__n) { uninitialized_fill_n(this->impl.start, __n, _Tp()); }};struct Tensor{ Tensor (); Tensor (const Tensor &); double values[2];};inlineTensor::Tensor (const Tensor &p){ for (unsigned int i=0; i<2; ++i) values[i] = p.values[i];}struct TriaAccessor{ typedef void * AccessorData; void copy_from (const TriaAccessor &); void operator = (const TriaAccessor *); TriaAccessor & operator = (const TriaAccessor &); bool operator == (const TriaAccessor &) const; bool operator != (const TriaAccessor &) const; void operator ++ (); int state () const; bool used () const; int present_level; int present_index; int** levels;};inline int TriaAccessor::state () const { if ((present_level>=0) && (present_index>=0)) return 0; else if ((present_level==-1) && (present_index==-1)) return 1; else return 2;}inlinevoid TriaAccessor::operator ++ () { ++this->present_index; while (this->present_index >= static_cast<int>(*this->levels[this->present_level])) { ++this->present_level; this->present_index = 0; if (this->present_level >= static_cast<int>(1)) { this->present_level = this->present_index = -1; return; } }}struct MGDoFObjectAccessor : TriaAccessor {};struct TriaRawIterator{ TriaRawIterator (); TriaRawIterator (const TriaRawIterator &); TriaRawIterator (const MGDoFObjectAccessor &a); const MGDoFObjectAccessor & operator * () const; MGDoFObjectAccessor & operator * (); const MGDoFObjectAccessor * operator -> () const; MGDoFObjectAccessor * operator -> (); TriaRawIterator & operator = (const TriaRawIterator &); bool operator == (const TriaRawIterator &) const; bool operator != (const TriaRawIterator &) const; bool operator < (const TriaRawIterator &) const; MGDoFObjectAccessor accessor; TriaRawIterator & operator ++ ();};struct TriaIterator : TriaRawIterator{ TriaIterator (); TriaIterator (const TriaIterator &i); TriaIterator & operator = (const TriaIterator &); TriaIterator & operator = (const TriaRawIterator &);};inlineTriaRawIterator::TriaRawIterator (const TriaRawIterator &i) : accessor (i.accessor) {}inlineTriaIterator::TriaIterator (const TriaIterator &i) : TriaRawIterator (static_cast<TriaRawIterator >(i)) {}inlineTriaRawIterator & TriaRawIterator::operator ++ () { while (++accessor, (this->accessor.state() == 0)) if (this->accessor.used() == true) return *this; return *this;}struct Comp { Comp (const Tensor &dir) : dir(dir) {} bool operator () (const TriaIterator &c1, const TriaIterator &c2) const; const Tensor dir;};template<typename Iter>void x1(Iter first, Iter last, int i, Comp comp){ x1(Iter(), last, i, comp);}template<typename Iter>inline void x2(Iter first, Iter last, Comp comp){ if (first.base() != last.base()) x1(first, last, (last - first), comp);}void downstream_dg (const Tensor& direction){ vector<TriaIterator> ordered_cells(13); const Comp comparator(direction); TriaIterator begin, end; copy (begin, end, ordered_cells.begin()); x2 (ordered_cells.begin(), ordered_cells.begin(), comparator);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?