| /* { dg-do compile } */ |
| /* { dg-options "-O2 -Wno-return-type" } */ |
| |
| |
| typedef int size_t; |
| namespace { |
| template < typename > struct char_traits; |
| } |
| namespace __gnu_cxx { |
| template < typename > class new_allocator { |
| }; |
| } |
| namespace std { |
| template < typename _Tp > class allocator:__gnu_cxx::new_allocator < _Tp > { |
| public: |
| size_t size_type; |
| typedef _Tp & const_reference; |
| template < typename > struct rebind { |
| typedef allocator other; |
| }; |
| }; |
| } |
| namespace __gnu_cxx { |
| template < typename _Alloc > struct __alloc_traits { |
| typedef typename _Alloc::const_reference const_reference; |
| template < typename _Tp > struct rebind { |
| typedef typename _Alloc::template rebind < _Tp >::other other; |
| }; |
| }; |
| } |
| namespace std { |
| struct __numeric_limits_base { |
| }; |
| template < typename _Tp > struct numeric_limits:__numeric_limits_base { |
| static _Tp max () { |
| } |
| }; |
| template < typename _Tp, typename _Alloc > struct _Vector_base { |
| typedef typename __gnu_cxx::__alloc_traits < _Alloc >::template rebind < |
| _Tp >::other _Tp_alloc_type; |
| }; |
| template < typename _Tp, typename _Alloc = std::allocator < _Tp > >class vector:_Vector_base < _Tp, |
| _Alloc |
| > { |
| typedef _Vector_base < _Tp, _Alloc > _Base; |
| typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; |
| typedef __gnu_cxx::__alloc_traits < _Tp_alloc_type > _Alloc_traits; |
| public: |
| _Tp value_type; |
| typedef typename _Alloc_traits::const_reference const_reference; |
| typedef size_t size_type; |
| size_type size () { |
| } const_reference operator[] (size_type) { |
| } |
| }; |
| template < typename _CharT, typename = |
| char_traits < _CharT > >class basic_ostream; |
| typedef basic_ostream < int >ostream; |
| class ios_base { |
| }; |
| template < typename, typename > class basic_ios:ios_base { |
| }; |
| template < typename _CharT, typename _Traits > class basic_ostream:basic_ios < _CharT, |
| _Traits |
| > { |
| public: |
| _CharT char_type; |
| typedef basic_ostream __ostream_type; |
| __ostream_type & operator<< (const void *) { |
| } |
| }; |
| } |
| namespace logging { |
| int GetMinLogLevel (); |
| typedef int LogSeverity; |
| LogSeverity LOG_ERROR_REPORT; |
| LogSeverity LOG_DCHECK; |
| class LogMessage { |
| public: |
| LogMessage (const char *, int, LogSeverity); |
| std::ostream & stream () { |
| } |
| }; |
| class LogMessageVoidify { |
| public: |
| LogMessageVoidify () { |
| } void operator& (std::ostream &) { |
| } |
| }; |
| } |
| namespace base { |
| namespace internal { |
| class WeakPtrBase { |
| }; |
| class SupportsWeakPtrBase { |
| }; |
| } template < typename T > class WeakPtr:internal::WeakPtrBase { |
| public: |
| WeakPtr () :ptr_ () { |
| } T *operator-> () { |
| logging:0 && |
| logging::LOG_DCHECK >= |
| logging::GetMinLogLevel () ? (void) 0 : logging:: |
| LogMessageVoidify () & logging:: |
| LogMessage ("../../base/memory/weak_ptr.h", 0, |
| logging::LOG_ERROR_REPORT).stream () << ". "; |
| } T *ptr_; |
| }; |
| template < class > class SupportsWeakPtr:internal::SupportsWeakPtrBase { |
| }; |
| } |
| template < class ObserverType > class ObserverListBase:base::SupportsWeakPtr < ObserverListBase < ObserverType > |
| > { |
| public: |
| class Iterator { |
| public: |
| Iterator (ObserverListBase & list) :max_index_ (0 ? std::numeric_limits < |
| size_t >::max () : list.observers_. |
| size () ) { |
| } ObserverType * |
| GetNext () { |
| ListType & observers = list_->observers_; |
| if (observers[0]) |
| ++index_; |
| } |
| base::WeakPtr < ObserverListBase > list_; |
| size_t |
| index_; |
| size_t |
| max_index_; |
| }; |
| typedef |
| std::vector < |
| ObserverType * > |
| ListType; |
| ListType |
| observers_; |
| }; |
| template < class ObserverType, bool > class ObserverList:public ObserverListBase < |
| ObserverType > { |
| }; |
| namespace |
| ProxyPrefs { |
| enum ConfigState |
| { }; |
| } |
| namespace |
| net { |
| class |
| ProxyConfig { |
| }; |
| class |
| ProxyConfigService { |
| public: |
| enum ConfigAvailability |
| { }; |
| class |
| Observer { |
| public: |
| Observer () { |
| } virtual void |
| OnProxyConfigChanged (const ProxyConfig &, ConfigAvailability) = 0; |
| }; |
| virtual void |
| OnLazyPoll () { |
| } |
| }; |
| } |
| class |
| ChromeProxyConfigService: |
| net::ProxyConfigService, |
| net::ProxyConfigService::Observer { |
| ConfigAvailability |
| GetLatestProxyConfig (net::ProxyConfig *); |
| void |
| UpdateProxyConfig (ProxyPrefs::ConfigState, const net::ProxyConfig &); |
| void |
| OnProxyConfigChanged (const net::ProxyConfig &, ConfigAvailability); |
| ObserverList < |
| net::ProxyConfigService::Observer, |
| 0 > |
| observers_; |
| }; |
| void |
| ChromeProxyConfigService::UpdateProxyConfig (ProxyPrefs::ConfigState, |
| const net::ProxyConfig &) { |
| net::ProxyConfig new_config; |
| ConfigAvailability availability = GetLatestProxyConfig (0); |
| net: |
| ProxyConfigService::Observer * obs; |
| obs->OnProxyConfigChanged (new_config, availability); |
| } |
| void |
| ChromeProxyConfigService::OnProxyConfigChanged (const net::ProxyConfig &, |
| ConfigAvailability |
| availability) { |
| net::ProxyConfig actual_config; |
| ObserverListBase < |
| net::ProxyConfigService::Observer >::Iterator it (observers_); |
| net: |
| ProxyConfigService::Observer * obs; |
| if (it.GetNext () ) |
| obs->OnProxyConfigChanged (actual_config, availability); |
| } |