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 + -
显示快捷键?