diff --git a/source/tinystl/container/array.h b/source/tinystl/container/array.h index 6b176ac..48c9f47 100644 --- a/source/tinystl/container/array.h +++ b/source/tinystl/container/array.h @@ -12,14 +12,18 @@ template struct array { // Member types using value_type = T; - using size_type = std::size_t; - using difference_type = std::ptrdiff_t; using reference = value_type &; using const_reference = const value_type &; + + using size_type = std::size_t; + using difference_type = std::ptrdiff_t; + using pointer = value_type *; using const_pointer = const value_type *; + using iterator = pointer; using const_iterator = const_pointer; + using reverse_iterator = std::reverse_iterator; using const_reverse_iterator = std::reverse_iterator; diff --git a/source/tinystl/container/deque.h b/source/tinystl/container/deque.h index edb28ea..a49ad25 100644 --- a/source/tinystl/container/deque.h +++ b/source/tinystl/container/deque.h @@ -4,6 +4,7 @@ #include #include +#include "tinystl/container/split_buffer.h" #include "tinystl/container/vector.h" #include "tinystl/iterator/segmented_iterator.h" @@ -201,25 +202,39 @@ template > class deque { using alloc_traits = std::allocator_traits; + using pointer_allocator = + alloc_traits::template rebind_alloc; + using const_pointer_allcoator = + alloc_traits::template rebind_alloc; + + using map = split_buffer; + using map_pointer = + typename std::allocator_traits::pointer; + using map_const_pointer = + typename std::allocator_traits::const_pointer; + using map_const_iterator = typename map::const_iterator; + public: using value_type = T; + using reference = value_type &; + using const_reference = const value_type &; + using allocator_type = Alloc; + using size_type = typename alloc_traits::size_type; using difference_type = typename alloc_traits::difference_type; - using reference = T &; - using const_reference = const T &; + using pointer = typename alloc_traits::pointer; using const_pointer = typename alloc_traits::const_pointer; - using pointer_allocator = alloc_traits::template rebind_alloc; - using map_alloc_traits = std::allocator_traits; - using map_pointer = typename map_alloc_traits::pointer; - using iterator = deque_iterator< value_type, pointer, reference, map_pointer, difference_type>; - using const_iterator = deque_iterator; - using reverse_iterator = std::reverse_iterator; - using const_reverse_iterator = std::reverse_iterator; + using const_iterator = deque_iterator< + value_type, const_pointer, const_reference, map_const_pointer, + difference_type>; + + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; // construct/copy/destroy deque(); diff --git a/source/tinystl/container/split_buffer.h b/source/tinystl/container/split_buffer.h index f80a4d2..873c61c 100644 --- a/source/tinystl/container/split_buffer.h +++ b/source/tinystl/container/split_buffer.h @@ -10,19 +10,25 @@ namespace tinystl { template class split_buffer { + using alloc_rr = std::remove_reference_t; + using alloc_traits = std::allocator_traits; + public: - using allocator_type = Alloc; using value_type = T; using reference = value_type &; using const_reference = const value_type &; - using alloc_rr = std::remove_reference_t; - using alloc_traits = std::allocator_traits; + + using allocator_type = Alloc; + using size_type = typename alloc_traits::size_type; using difference_type = typename alloc_traits::difference_type; + using pointer = typename alloc_traits::pointer; using const_pointer = typename alloc_traits::const_pointer; + using iterator = pointer; using const_iterator = const_pointer; + using sentinel_type = pointer; split_buffer(const split_buffer &) = delete; diff --git a/source/tinystl/container/vector.h b/source/tinystl/container/vector.h index 3aefcce..0346ed4 100644 --- a/source/tinystl/container/vector.h +++ b/source/tinystl/container/vector.h @@ -1,8 +1,9 @@ #pragma once +#include #include -#include #include +#include #include #include @@ -14,17 +15,22 @@ class vector { public: using value_type = T; + using reference = value_type &; + using const_reference = const value_type &; + using allocator_type = Alloc; - using size_type = std::size_t; - using difference_type = std::ptrdiff_t; - using reference = T &; - using const_reference = const T &; - using pointer = T *; - using const_pointer = const T *; - using iterator = T *; - using const_iterator = const T *; - using reverse_iterator = std::reverse_iterator; - using const_reverse_iterator = std::reverse_iterator; + + using size_type = typename alloc_traits::size_type; + using difference_type = typename alloc_traits::difference_type; + + using pointer = typename alloc_traits::pointer; + using const_pointer = typename alloc_traits::const_pointer; + + using iterator = pointer; + using const_iterator = const_pointer; + + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; // construct/copy/destroy vector() noexcept(noexcept(Alloc()));