pr27291.c

来自「用于进行gcc测试」· C语言 代码 · 共 364 行

C
364
字号
/* { dg-do compile } *//* { dg-options "-O2" } */namespace std{  template < class _T1, class _T2 > struct pair  {  };}extern "C"{  extern "C"  {    typedef int int32_t __attribute__ ((__mode__ (__SI__)));    struct _pthread_fastlock    {    }    pthread_mutexattr_t;  }}namespace std{  struct __numeric_limits_base  {  };    template < typename _Tp >    struct numeric_limits:public __numeric_limits_base  {    static const bool is_integer = true;  };};typedef unsigned int uint32_t;namespace std{  template < typename _Alloc > class allocator;  template < class _CharT > struct char_traits;    template < typename _CharT, typename _Traits =    char_traits < _CharT >, typename _Alloc =    allocator < _CharT > >class basic_string;  typedef basic_string < char >string;}namespace __gnu_cxx{  template < typename _Tp > class new_allocator  {  };}namespace std{  template < typename _Tp > class allocator:public __gnu_cxx::new_allocator <    _Tp >  {  };  template < typename _CharT, typename _Traits,    typename _Alloc > class basic_string  {  public:inline basic_string ();    basic_string (const _CharT * __s, const _Alloc & __a = _Alloc ());  };}namespace boost{  template < class T > class integer_traits:public std::numeric_limits < T >  {  };  namespace detail  {    template < class T, T min_val, T max_val > class integer_traits_base    {    };  }  template <> class integer_traits < int >:public std::numeric_limits < int >,    public detail::integer_traits_base < int, (-2147483647 - 1), 2147483647 >  {  };  namespace random  {    template < class IntType, IntType m > class const_mod    {    public:static IntType add (IntType x, IntType c)      {      }      static IntType mult (IntType a, IntType x)      {	return mult_schrage (a, x);      }      static IntType mult_add (IntType a, IntType x, IntType c)      {	return add (mult (a, x), c);      }      static IntType mult_schrage (IntType a, IntType value)      {	for (;;)	  {	    if (value > 0)	      break;	    value += m;	  }      }    };    template < class IntType, IntType a, IntType c, IntType m,      IntType val > class linear_congruential    {    public:typedef IntType result_type;      static const IntType modulus = m;    explicit linear_congruential (IntType x0 = 1):_modulus (modulus),	_x (_modulus ? (x0 % _modulus) :	    x0)      {      }      IntType operator    () ()      {	_x = const_mod < IntType, m >::mult_add (a, _x, c);      }    private:IntType _modulus;      IntType _x;    };  }  typedef random::linear_congruential < int32_t, 16807, 0, 2147483647,    1043618065 > minstd_rand0;  namespace random  {    namespace detail    {      template < class T > struct ptr_helper      {	typedef T value_type;	typedef T & reference_type;	typedef const T & rvalue_type;	static reference_type ref (T & r)	{	}      };        template < class T > struct ptr_helper <T & >      {	typedef T value_type;	typedef T & rvalue_type;      };    }  }  template < class UniformRandomNumberGenerator, class RealType =    double >class uniform_01  {  public:typedef UniformRandomNumberGenerator base_type;    typedef RealType result_type;    explicit uniform_01 (base_type rng):_rng (rng),      _factor (result_type (1) /	       (result_type ((_rng.max) () - (_rng.min) ()) +		result_type (std::numeric_limits <			     base_result >::is_integer ? 1 : 0)))    {    }    result_type operator    () ()    {      return result_type (_rng () - (_rng.min) ()) * _factor;    }  private:typedef typename base_type::result_type base_result;    base_type _rng;    result_type _factor;  };  namespace random  {    namespace detail    {      template < class UniformRandomNumberGenerator >	class pass_through_engine      {      private:typedef ptr_helper < UniformRandomNumberGenerator >	  helper_type;      public:typedef typename helper_type::value_type base_type;	typedef typename base_type::result_type result_type;	explicit pass_through_engine (UniformRandomNumberGenerator				      rng):_rng (static_cast <						 typename helper_type::						 rvalue_type > (rng))	{	}	result_type min () const	{	}	result_type max () const	{	}	base_type & base ()	{	}	result_type operator    () ()	{	  return base ()();	}      private:UniformRandomNumberGenerator _rng;      };    }    template < class RealType, int w, unsigned int p,      unsigned int q > class lagged_fibonacci_01    {    public:typedef RealType result_type;      static const unsigned int long_lag = p;        lagged_fibonacci_01 ()      {	seed ();      }    public:void seed (uint32_t value = 331u)      {	minstd_rand0 intgen (value);	seed (intgen);      }      template < class Generator > void seed (Generator & gen)      {	typedef detail::pass_through_engine < Generator & >ref_gen;	uniform_01 < ref_gen, RealType > gen01 =	  uniform_01 < ref_gen, RealType > (ref_gen (gen));	for (unsigned int j = 0; j < long_lag; ++j)	  x[j] = gen01 ();      }      RealType x[long_lag];    };  }  typedef random::lagged_fibonacci_01 < double, 48, 607,    273 > lagged_fibonacci607;  namespace random  {    namespace detail    {      template < bool have_int, bool want_int > struct engine_helper;        template <> struct engine_helper <true, true >      {	template < class Engine, class DistInputType > struct impl	{	  typedef pass_through_engine < Engine > type;	};      };    }  }  template < class Engine, class Distribution > class variate_generator  {  private:typedef random::detail::pass_through_engine < Engine >      decorated_engine;  public:typedef typename decorated_engine::base_type engine_value_type;    typedef Distribution distribution_type;  variate_generator (Engine e, Distribution d):_eng (decorated_engine (e)),      _dist (d)    {    }  private:enum    {      have_int =	std::numeric_limits <	typename decorated_engine::result_type >::is_integer, want_int =	std::numeric_limits < typename Distribution::input_type >::is_integer    };    typedef typename random::detail::engine_helper < have_int,      want_int >::template impl < decorated_engine,      typename Distribution::input_type >::type internal_engine_type;    internal_engine_type _eng;    distribution_type _dist;  };  template < class RealType = double >class uniform_real  {  public:typedef RealType input_type;  };}namespace alps{  class BufferedRandomNumberGeneratorBase  {  };    template < class RNG >    class BufferedRandomNumberGenerator:public    BufferedRandomNumberGeneratorBase  {  public: BufferedRandomNumberGenerator ():rng_ (), gen_ (rng_,		   boost::		   uniform_real <> ())    {    }  protected:  RNG rng_;    boost::variate_generator < RNG &, boost::uniform_real <> >gen_;  };}namespace boost{  namespace detail  {    class sp_counted_base    {    };    class shared_count    {    private:sp_counted_base * pi_;    public:shared_count ():pi_ (0)      {      }      template < class Y > explicit shared_count (Y * p):pi_ (0)      {      }    };  }  template < class T > class shared_ptr  {  public:typedef T element_type;  template < class Y > explicit shared_ptr (Y * p):px (p), pn (p)    {    }    T *px;    detail::shared_count pn;  };}namespace std{  template < typename _Key, typename _Tp, typename _Compare =    std::allocator < std::pair < const _Key, _Tp > > > class map  {  public:typedef _Key key_type;    typedef _Tp mapped_type;      mapped_type & operator[] (const key_type & __k)    {    }  };}namespace alps{  namespace detail  {    template < class BASE > class abstract_creator    {    public:typedef BASE base_type;      virtual base_type *create () const = 0;    };      template < class BASE,      class T > class creator:public abstract_creator < BASE >    {    public:typedef BASE base_type;      base_type *create () const      {	return new T ();      }    };  }  template < class KEY, class BASE > class factory  {  public:typedef BASE base_type;    typedef KEY key_type;    typedef boost::shared_ptr < detail::abstract_creator < base_type >      >pointer_type;    template < class T > bool register_type (key_type k)    {      creators_[k] = pointer_type (new detail::creator < BASE, T > ());    }  private:typedef std::map < key_type, pointer_type > map_type;    map_type creators_;  };  class RNGFactory:public factory < std::string,    BufferedRandomNumberGeneratorBase >  {  public:RNGFactory ();  };}alps::RNGFactory::RNGFactory (){  register_type < BufferedRandomNumberGenerator < boost::lagged_fibonacci607 >    >("lagged_fibonacci607");}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?