1[/ 2 Copyright 2016-2017 Joaquin M Lopez Munoz. 3 Distributed under the Boost Software License, Version 1.0. 4 (See accompanying file LICENSE_1_0.txt or copy at 5 http://www.boost.org/LICENSE_1_0.txt) 6] 7 8[template poly_collection_synopsis[class_name template_header value_type] 9 ``[template_header]`` 10 class ``[class_name]`` 11 { 12 public: 13 ``[link poly_collection.reference.polymorphic_containers.polymorphic_collections.types ['// types:]]`` 14 15 using value_type=``[value_type]``; 16 using allocator_type=Allocator; 17 using size_type=std::size_t; 18 using difference_type=std::ptrdiff_t; 19 using reference=value_type&; 20 using const_reference=const value_type&; 21 using pointer=typename std::allocator_traits<Allocator>::pointer; 22 using const_pointer=typename std::allocator_traits<Allocator>::const_pointer; 23 using iterator=``/implementation-defined/``; 24 using const_iterator=``/implementation-defined/``; 25 using _local_base_iterator_=``/implementation-defined/``; 26 using _const_local_base_iterator_=``/implementation-defined/``; 27 template<typename T> using _local_iterator_=``/implementation-defined/``; 28 template<typename T> using _const_local_iterator_=``/implementation-defined/``; 29 class _const_base_segment_info_; 30 class _base_segment_info_; 31 template<typename T> class _const_segment_info_; 32 template<typename T> class _segment_info_; 33 using _base_segment_info_iterator_=``/implementation-defined/``; 34 using _const_base_segment_info_iterator_=``/implementation-defined/``; 35 class _const_segment_traversal_info_; 36 class _segment_traversal_info_; 37 38 ``[link poly_collection.reference.polymorphic_containers.polymorphic_collections.construct_copy_destroy ['// construct/destroy/copy:]]`` 39 40 ``[class_name]``(); 41 ``[class_name]``(const ``[class_name]``&); 42 ``[class_name]``(``[class_name]``&&); 43 explicit ``[class_name]``(const allocator_type& al); 44 ``[class_name]``(const ``[class_name]``& x,const allocator_type& al); 45 ``[class_name]``(``[class_name]``&& x,const allocator_type& al); 46 template<typename InputIterator> 47 ``[link poly_collection.reference.polymorphic_containers.polymorphic_collections.construct_copy_destroy.range_construction [class_name]]``( 48 InputIterator first,InputIterator last, 49 const allocator_type& al=allocator_type{}); 50 51 ``[class_name]``& operator=(const ``[class_name]``&); 52 ``[class_name]``& operator=(``[class_name]``&&); 53 54 allocator_type get_allocator()const noexcept; 55 56 ``[link poly_collection.reference.polymorphic_containers.polymorphic_collections.type_registration ['// type registration:]]`` 57 58 template<typename... T> 59 void _register_types_(); 60 61 bool _is_registered_(const std::type_info& info)const; 62 template<typename T> bool _is_registered_()const; 63 64 ``[link poly_collection.reference.polymorphic_containers.polymorphic_collections.iterators ['// iterators:]]`` 65 66 iterator _begin_()noexcept; 67 iterator _end_()noexcept; 68 const_iterator _begin_()const noexcept; 69 const_iterator _end_()const noexcept; 70 const_iterator _cbegin_()const noexcept; 71 const_iterator _cend_()const noexcept; 72 73 local_base_iterator _begin_(const std::type_info& info); 74 local_base_iterator _end_(const std::type_info& info); 75 const_local_base_iterator _begin_(const std::type_info& info)const; 76 const_local_base_iterator _end_(const std::type_info& info)const; 77 const_local_base_iterator _cbegin_(const std::type_info& info)const; 78 const_local_base_iterator _cend_(const std::type_info& info)const; 79 80 template<typename T> local_iterator<T> _begin_(); 81 template<typename T> local_iterator<T> _end_(); 82 template<typename T> const_local_iterator<T> _begin_()const; 83 template<typename T> const_local_iterator<T> _end_()const; 84 template<typename T> const_local_iterator<T> _cbegin_()const; 85 template<typename T> const_local_iterator<T> _cend_()const; 86 87 base_segment_info _segment_(const std::type_info& info); 88 const_base_segment_info _segment_(const std::type_info& info)const; 89 template<typename T> segment_info<T> _segment_(); 90 template<typename T> const_segment_info<T> _segment_()const; 91 92 segment_traversal_info _segment_traversal_()noexcept; 93 const_segment_traversal_info _segment_traversal_()const noexcept; 94 95 ``[link poly_collection.reference.polymorphic_containers.polymorphic_collections.capacity ['// capacity:]]`` 96 97 bool empty()const noexcept; 98 bool _empty_(const std::type_info& info)const; 99 template<typename T> bool _empty_()const; 100 101 size_type size()const noexcept; 102 size_type _size_(const std::type_info& info)const; 103 template<typename T> size_type _size_()const; 104 105 size_type _max_size_(const std::type_info& info)const; 106 template<typename T> size_type _max_size_()const; 107 108 size_type _capacity_(const std::type_info& info)const; 109 template<typename T> size_type _capacity_()const; 110 111 void _reserve_(size_type n); 112 void _reserve_(const std::type_info& info,size_type n); 113 template<typename T>void _reserve_(size_type n); 114 115 void _shrink_to_fit_(); 116 void _shrink_to_fit_(const std::type_info& info); 117 template<typename T> void _shrink_to_fit_(); 118 119 ``[link poly_collection.reference.polymorphic_containers.polymorphic_collections.modifiers ['// modifiers:]]`` 120 121 template<typename T,typename... Args> 122 iterator _emplace_(Args&&... args); 123 124 template<typename T,typename... Args> 125 iterator _emplace_hint_(const_iterator hint,Args&&... args); 126 127 template<typename T,typename LocalIterator,typename... Args> 128 auto _emplace_pos_(LocalIterator pos,Args&&... args); 129 130 template<typename T> 131 iterator _insert_(T&& x); 132 133 template<typename CollectionIterator,typename T> 134 auto _insert_hint_(CollectionIterator hint,T&& x); 135 136 template<typename InputIterator> 137 void _insert_range_(InputIterator first,InputIterator last); 138 139 template<typename CollectionIterator,typename InputIterator> 140 void _insert_hint_range_(CollectionIterator hint,InputIterator first,InputIterator last); 141 142 template<typename CollectionIterator> 143 auto _erase_(CollectionIterator pos); 144 145 template<typename CollectionIterator> 146 auto _erase_(CollectionIterator first,CollectionIterator last); 147 148 void _clear_()noexcept; 149 void _clear_(const std::type_info& info); 150 template<typename T> void _clear_(); 151 152 void swap(``[class_name]``& x); 153 }; 154]