| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef CollectionsWTF_h | |
| 6 #define CollectionsWTF_h | |
| 7 | |
| 8 #include "wtf/Allocator.h" | |
| 9 #include "wtf/HashMap.h" | |
| 10 #include "wtf/PtrUtil.h" | |
| 11 #include "wtf/Vector.h" | |
| 12 #include "wtf/VectorTraits.h" | |
| 13 | |
| 14 namespace blink { | |
| 15 namespace protocol { | |
| 16 | |
| 17 template <typename T> | |
| 18 class Vector { | |
| 19 public: | |
| 20 Vector() { } | |
| 21 Vector(size_t capacity) : m_impl(capacity) { } | |
| 22 typedef T* iterator; | |
| 23 typedef const T* const_iterator; | |
| 24 | |
| 25 iterator begin() { return m_impl.begin(); } | |
| 26 iterator end() { return m_impl.end(); } | |
| 27 const_iterator begin() const { return m_impl.begin(); } | |
| 28 const_iterator end() const { return m_impl.end(); } | |
| 29 | |
| 30 void resize(size_t s) { m_impl.resize(s); } | |
| 31 size_t size() const { return m_impl.size(); } | |
| 32 bool isEmpty() const { return m_impl.isEmpty(); } | |
| 33 T& operator[](size_t i) { return at(i); } | |
| 34 const T& operator[](size_t i) const { return at(i); } | |
| 35 T& at(size_t i) { return m_impl.at(i); } | |
| 36 const T& at(size_t i) const { return m_impl.at(i); } | |
| 37 T& last() { return m_impl.last(); } | |
| 38 const T& last() const { return m_impl.last(); } | |
| 39 void append(const T& t) { m_impl.append(t); } | |
| 40 void prepend(const T& t) { m_impl.prepend(t); } | |
| 41 void remove(size_t i) { m_impl.remove(i); } | |
| 42 void clear() { m_impl.clear(); } | |
| 43 void swap(Vector<T>& other) { m_impl.swap(other.m_impl); } | |
| 44 void removeLast() { m_impl.removeLast(); } | |
| 45 | |
| 46 private: | |
| 47 WTF::Vector<T> m_impl; | |
| 48 }; | |
| 49 | |
| 50 template <typename T> | |
| 51 class Vector<std::unique_ptr<T>> { | |
| 52 WTF_MAKE_NONCOPYABLE(Vector); | |
| 53 public: | |
| 54 Vector() { } | |
| 55 Vector(size_t capacity) : m_impl(capacity) { } | |
| 56 Vector(Vector<std::unique_ptr<T>>&& other) : m_impl(std::move(other.m_impl))
{ } | |
| 57 ~Vector() { } | |
| 58 | |
| 59 typedef std::unique_ptr<T>* iterator; | |
| 60 typedef const std::unique_ptr<T>* const_iterator; | |
| 61 | |
| 62 iterator begin() { return m_impl.begin(); } | |
| 63 iterator end() { return m_impl.end(); } | |
| 64 const_iterator begin() const { return m_impl.begin(); } | |
| 65 const_iterator end() const { return m_impl.end(); } | |
| 66 | |
| 67 void resize(size_t s) { m_impl.resize(s); } | |
| 68 size_t size() const { return m_impl.size(); } | |
| 69 bool isEmpty() const { return m_impl.isEmpty(); } | |
| 70 T* operator[](size_t i) { return m_impl.at(i).get(); } | |
| 71 const T* operator[](size_t i) const { return m_impl.at(i).get(); } | |
| 72 T* at(size_t i) { return m_impl.at(i).get(); } | |
| 73 const T* at(size_t i) const { return m_impl.at(i).get(); } | |
| 74 T* last() { return m_impl.last().get(); } | |
| 75 const T* last() const { return m_impl.last(); } | |
| 76 void append(std::unique_ptr<T> t) { m_impl.append(std::move(t)); } | |
| 77 void prepend(std::unique_ptr<T> t) { m_impl.prepend(std::move(t)); } | |
| 78 void remove(size_t i) { m_impl.remove(i); } | |
| 79 void clear() { m_impl.clear(); } | |
| 80 void swap(Vector<std::unique_ptr<T>>& other) { m_impl.swap(other.m_impl); } | |
| 81 void swap(Vector<std::unique_ptr<T>>&& other) { m_impl.swap(other.m_impl); } | |
| 82 void removeLast() { m_impl.removeLast(); } | |
| 83 | |
| 84 private: | |
| 85 WTF::Vector<std::unique_ptr<T>> m_impl; | |
| 86 }; | |
| 87 | |
| 88 template <typename K, typename V, typename I> | |
| 89 class HashMapIterator { | |
| 90 STACK_ALLOCATED(); | |
| 91 public: | |
| 92 HashMapIterator(const I& impl) : m_impl(impl) { } | |
| 93 std::pair<K, V*>* get() const { m_pair = std::make_pair(m_impl->key, &m_impl
->value); return &m_pair; } | |
| 94 std::pair<K, V*>& operator*() const { return *get(); } | |
| 95 std::pair<K, V*>* operator->() const { return get(); } | |
| 96 | |
| 97 bool operator==(const HashMapIterator<K, V, I>& other) const { return m_impl
== other.m_impl; } | |
| 98 bool operator!=(const HashMapIterator<K, V, I>& other) const { return m_impl
!= other.m_impl; } | |
| 99 | |
| 100 HashMapIterator<K, V, I>& operator++() { ++m_impl; return *this; } | |
| 101 | |
| 102 private: | |
| 103 mutable std::pair<K, V*> m_pair; | |
| 104 I m_impl; | |
| 105 }; | |
| 106 | |
| 107 template <typename K, typename V, typename I> | |
| 108 class HashMapIterator<K, std::unique_ptr<V>, I> { | |
| 109 STACK_ALLOCATED(); | |
| 110 public: | |
| 111 HashMapIterator(const I& impl) : m_impl(impl) { } | |
| 112 std::pair<K, V*>* get() const { m_pair = std::make_pair(m_impl->key, m_impl-
>value.get()); return &m_pair; } | |
| 113 std::pair<K, V*>& operator*() const { return *get(); } | |
| 114 std::pair<K, V*>* operator->() const { return get(); } | |
| 115 | |
| 116 bool operator==(const HashMapIterator<K, std::unique_ptr<V>, I>& other) cons
t { return m_impl == other.m_impl; } | |
| 117 bool operator!=(const HashMapIterator<K, std::unique_ptr<V>, I>& other) cons
t { return m_impl != other.m_impl; } | |
| 118 | |
| 119 HashMapIterator<K, std::unique_ptr<V>, I>& operator++() { ++m_impl; return *
this; } | |
| 120 | |
| 121 private: | |
| 122 mutable std::pair<K, V*> m_pair; | |
| 123 I m_impl; | |
| 124 }; | |
| 125 | |
| 126 template <typename K, typename V> | |
| 127 class HashMap { | |
| 128 public: | |
| 129 HashMap() { } | |
| 130 ~HashMap() { } | |
| 131 | |
| 132 using iterator = HashMapIterator<K, V, typename WTF::HashMap<K, V>::iterator
>; | |
| 133 using const_iterator = HashMapIterator<K, const V, typename WTF::HashMap<K,
V>::const_iterator>; | |
| 134 | |
| 135 iterator begin() { return iterator(m_impl.begin()); } | |
| 136 iterator end() { return iterator(m_impl.end()); } | |
| 137 iterator find(const K& k) { return iterator(m_impl.find(k)); } | |
| 138 const_iterator begin() const { return const_iterator(m_impl.begin()); } | |
| 139 const_iterator end() const { return const_iterator(m_impl.end()); } | |
| 140 const_iterator find(const K& k) const { return const_iterator(m_impl.find(k)
); } | |
| 141 | |
| 142 size_t size() const { return m_impl.size(); } | |
| 143 bool isEmpty() const { return m_impl.isEmpty(); } | |
| 144 bool set(const K& k, const V& v) { return m_impl.set(k, v).isNewEntry; } | |
| 145 bool contains(const K& k) const { return m_impl.contains(k); } | |
| 146 V get(const K& k) const { return m_impl.get(k); } | |
| 147 void remove(const K& k) { m_impl.remove(k); } | |
| 148 void clear() { m_impl.clear(); } | |
| 149 V take(const K& k) { return m_impl.take(k); } | |
| 150 | |
| 151 private: | |
| 152 WTF::HashMap<K, V> m_impl; | |
| 153 }; | |
| 154 | |
| 155 template <typename K, typename V> | |
| 156 class HashMap<K, std::unique_ptr<V>> { | |
| 157 public: | |
| 158 HashMap() { } | |
| 159 ~HashMap() { } | |
| 160 | |
| 161 using iterator = HashMapIterator<K, std::unique_ptr<V>, typename WTF::HashMa
p<K, std::unique_ptr<V>>::iterator>; | |
| 162 using const_iterator = HashMapIterator<K, std::unique_ptr<V>, typename WTF::
HashMap<K, std::unique_ptr<V>>::const_iterator>; | |
| 163 | |
| 164 iterator begin() { return iterator(m_impl.begin()); } | |
| 165 iterator end() { return iterator(m_impl.end()); } | |
| 166 iterator find(const K& k) { return iterator(m_impl.find(k)); } | |
| 167 const_iterator begin() const { return const_iterator(m_impl.begin()); } | |
| 168 const_iterator end() const { return const_iterator(m_impl.end()); } | |
| 169 const_iterator find(const K& k) const { return const_iterator(m_impl.find(k)
); } | |
| 170 | |
| 171 size_t size() const { return m_impl.size(); } | |
| 172 bool isEmpty() const { return m_impl.isEmpty(); } | |
| 173 bool set(const K& k, std::unique_ptr<V> v) { return m_impl.set(k, std::move(
v)).isNewEntry; } | |
| 174 bool contains(const K& k) const { return m_impl.contains(k); } | |
| 175 V* get(const K& k) const { return m_impl.get(k); } | |
| 176 std::unique_ptr<V> take(const K& k) { return m_impl.take(k); } | |
| 177 void remove(const K& k) { m_impl.remove(k); } | |
| 178 void clear() { m_impl.clear(); } | |
| 179 | |
| 180 private: | |
| 181 WTF::HashMap<K, std::unique_ptr<V>> m_impl; | |
| 182 }; | |
| 183 | |
| 184 template <typename K> | |
| 185 class HashSet : public protocol::HashMap<K, K> { | |
| 186 public: | |
| 187 void add(const K& k) { this->set(k, k); } | |
| 188 }; | |
| 189 | |
| 190 } // namespace platform | |
| 191 } // namespace blink | |
| 192 | |
| 193 #endif // !defined(CollectionsWTF_h) | |
| OLD | NEW |