| /* { dg-do compile { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ |
| // { dg-require-effective-target c++11 } |
| // { dg-require-effective-target fpic } |
| /* { dg-options "-O2 -fno-omit-frame-pointer -fPIC" } */ |
| |
| typedef int int32; |
| typedef long long int64; |
| typedef unsigned int uint32; |
| typedef unsigned long long uint64; |
| namespace std { |
| typedef __SIZE_TYPE__ size_t; |
| template<class _CharT> |
| struct char_traits; |
| template<typename _Tp> |
| inline _Tp* __addressof(_Tp& __r) noexcept { |
| return reinterpret_cast<_Tp*> (&const_cast<char&>(reinterpret_cast<const volatile char&>(__r))); |
| } |
| template<typename _Tp> |
| struct remove_reference { |
| typedef _Tp type; |
| }; |
| template<typename _Tp> |
| constexpr _Tp&& forward(typename std::remove_reference<_Tp>::type& __t) noexcept { |
| return static_cast<_Tp&&>(__t); |
| } |
| } |
| typedef __SIZE_TYPE__ size_t; |
| extern "C++" { |
| inline void* operator new(std::size_t, void* __p) noexcept { |
| return __p; |
| } |
| } |
| namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { |
| template<typename _Tp> |
| class new_allocator { |
| public: |
| typedef size_t size_type; |
| typedef _Tp* pointer; |
| }; |
| } |
| namespace std { |
| template<typename _Tp> |
| using __allocator_base = __gnu_cxx::new_allocator<_Tp>; |
| template<typename _Tp> |
| class allocator |
| : public __allocator_base<_Tp> { |
| public: |
| typedef size_t size_type; |
| template<typename _Tp1> |
| struct rebind { |
| typedef allocator<_Tp1> other; |
| }; |
| }; |
| } |
| namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { |
| template<typename _CharT, typename _Traits, typename _Alloc> |
| class __sso_string_base; |
| template<typename _CharT, typename _Traits = std::char_traits<_CharT>, typename _Alloc = std::allocator<_CharT>, template <typename, typename, typename> class _Base = __sso_string_base> |
| class __versa_string; |
| template<typename _CharT, typename _Traits, typename _Alloc> |
| struct __vstring_utility { |
| typedef typename _Alloc::template rebind<_CharT>::other _CharT_alloc_type; |
| template<typename _Alloc1> |
| struct _Alloc_hider |
| : public _Alloc1 { |
| _Alloc_hider(const _Alloc1& __a, _CharT* __ptr) |
| : _Alloc1(__a), _M_p(__ptr) { |
| } |
| _CharT* _M_p; |
| }; |
| }; |
| template<typename _CharT, typename _Traits, typename _Alloc> |
| class __sso_string_base |
| : protected __vstring_utility<_CharT, _Traits, _Alloc> { |
| typedef __vstring_utility<_CharT, _Traits, _Alloc> _Util_Base; |
| typedef typename _Util_Base::_CharT_alloc_type _CharT_alloc_type; |
| typedef typename _CharT_alloc_type::size_type size_type; |
| private: |
| typename _Util_Base::template _Alloc_hider<_CharT_alloc_type> |
| _M_dataplus; |
| size_type _M_string_length; |
| enum { |
| _S_local_capacity = 15 }; |
| union { |
| _CharT _M_local_data[_S_local_capacity + 1]; |
| }; |
| template<typename _InIterator> |
| void _M_construct(_InIterator __beg, _InIterator __end); |
| public: |
| size_type _M_max_size() const; |
| _CharT* _M_data() const { |
| return _M_dataplus._M_p; |
| } |
| size_type _M_length() const { |
| return _M_string_length; |
| } |
| __sso_string_base(const __sso_string_base& __rcs); |
| const _CharT_alloc_type& _M_get_allocator() const { |
| static _CharT_alloc_type c; |
| return c; |
| } |
| }; |
| template<typename _CharT, typename _Traits, typename _Alloc> |
| __sso_string_base<_CharT, _Traits, _Alloc>:: __sso_string_base(const __sso_string_base& __rcs) |
| : _M_dataplus(__rcs._M_get_allocator(), _M_local_data) { |
| _M_construct(__rcs._M_data(), __rcs._M_data() + __rcs._M_length()); |
| } |
| template<typename _CharT, typename _Traits, typename _Alloc, template <typename, typename, typename> class _Base> |
| class __versa_string |
| : private _Base<_CharT, _Traits, _Alloc> { |
| }; |
| } |
| template<typename _CharT, typename _Traits = std::char_traits<_CharT>, typename _Alloc = std::allocator<_CharT> > |
| class basic_string |
| : public __gnu_cxx::__versa_string<_CharT, _Traits, _Alloc> { |
| }; |
| typedef basic_string<char> string; |
| namespace std __attribute__ ((__visibility__ ("default"))) { |
| template<typename _Alloc, typename _Tp> |
| class __alloctr_rebind_helper { |
| public: |
| static const bool __value = true; |
| }; |
| template<typename _Alloc, typename _Tp, bool = __alloctr_rebind_helper<_Alloc, _Tp>::__value> |
| struct __alloctr_rebind; |
| template<typename _Alloc, typename _Tp> struct __alloctr_rebind<_Alloc, _Tp, true> |
| { |
| typedef typename _Alloc::template rebind<_Tp>::other __type; |
| }; |
| template<typename _Alloc> |
| struct allocator_traits { |
| private: |
| template<typename _Tp> |
| static typename _Tp::pointer _S_pointer_helper(_Tp*); |
| typedef decltype(_S_pointer_helper((_Alloc*)0)) __pointer; |
| public: |
| typedef __pointer pointer; |
| template<typename _Tp> |
| using rebind_alloc = typename __alloctr_rebind<_Alloc, _Tp>::__type; |
| }; |
| } |
| namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { |
| template<typename _Alloc> struct __alloc_traits |
| : std::allocator_traits<_Alloc> |
| { |
| typedef std::allocator_traits<_Alloc> _Base_type; |
| template<typename _Tp> |
| struct rebind { |
| typedef typename _Base_type::template rebind_alloc<_Tp> |
| other; |
| }; |
| }; |
| } |
| namespace std __attribute__ ((__visibility__ ("default"))) { |
| template<typename _T1, typename... _Args> |
| inline void _Construct(_T1* __p, _Args&&... __args) { |
| ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); |
| } |
| template<typename _Tp, typename _Alloc> |
| struct _Vector_base { |
| typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template rebind<_Tp>::other _Tp_alloc_type; |
| typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer pointer; |
| struct _Vector_impl |
| : public _Tp_alloc_type { |
| pointer _M_start; |
| pointer _M_finish; |
| }; |
| public: |
| _Vector_impl _M_impl; |
| }; |
| template<typename _Tp, typename _Alloc = std::allocator<_Tp> > |
| class vector |
| : protected _Vector_base<_Tp, _Alloc> { |
| typedef _Vector_base<_Tp, _Alloc> _Base; |
| public: |
| typedef _Tp value_type; |
| typedef typename _Base::pointer pointer; |
| typedef size_t size_type; |
| size_type size() const; |
| void push_back(const value_type& __x) { |
| _M_emplace_back_aux(__x); |
| } |
| template<typename... _Args> |
| void _M_emplace_back_aux(_Args&&... __args); |
| size_type _M_check_len(); |
| }; |
| template<typename _Tp, typename _Alloc> template<typename... _Args> |
| void vector<_Tp, _Alloc>:: _M_emplace_back_aux(_Args&&... __args) { |
| const size_type __len = _M_check_len(); |
| pointer __new_start(static_cast<pointer>(::operator new(__len * sizeof(_Tp)))); |
| pointer __new_temp(__new_start + size()); |
| ::new((void *)__new_temp) _Tp(std::forward<_Args>(__args)...); |
| pointer __cur = __new_start; |
| pointer __first = this->_M_impl._M_start; |
| pointer __last = this->_M_impl._M_finish; |
| for (; |
| __first != __last; |
| ++__first, ++__cur) std::_Construct(std::__addressof(*__cur), *__first); |
| } |
| } |
| using std::vector; |
| class DL { |
| public: |
| struct ChunkId { |
| int64 disk_id; |
| uint64 handle; |
| uint64 version; |
| string capability; |
| ChunkId(); |
| }; |
| struct ChunkInfo { |
| ChunkId id; |
| uint64 mtime; |
| uint32 length; |
| int32 space_used; |
| }; |
| }; |
| class FDB { |
| void CollectChunk(const DL::ChunkInfo& chunk, const int& location); |
| private: |
| struct ChunkData { |
| int location; |
| DL::ChunkInfo chunk_info; |
| }; |
| vector<ChunkData> chunk_data_; |
| }; |
| void FDB::CollectChunk(const DL::ChunkInfo& chunk, const int& location) { |
| ChunkData chunk_data; |
| chunk_data_.push_back( chunk_data); |
| } |