• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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]