| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef COURGETTE_MEMORY_ALLOCATOR_H_ | 5 #ifndef COURGETTE_MEMORY_ALLOCATOR_H_ |
| 6 #define COURGETTE_MEMORY_ALLOCATOR_H_ | 6 #define COURGETTE_MEMORY_ALLOCATOR_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 #include <stdlib.h> | 10 #include <stdlib.h> |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 // (largest at 136MB) 10 allocations just below the threshold and 6362 | 174 // (largest at 136MB) 10 allocations just below the threshold and 6362 |
| 175 // smaller allocations. | 175 // smaller allocations. |
| 176 static const size_t kMaxHeapAllocationSize = 1024 * 1024 * 5; | 176 static const size_t kMaxHeapAllocationSize = 1024 * 1024 * 5; |
| 177 | 177 |
| 178 template<class OtherT> | 178 template<class OtherT> |
| 179 struct rebind { | 179 struct rebind { |
| 180 // convert a MemoryAllocator<T> to a MemoryAllocator<OtherT> | 180 // convert a MemoryAllocator<T> to a MemoryAllocator<OtherT> |
| 181 typedef MemoryAllocator<OtherT> other; | 181 typedef MemoryAllocator<OtherT> other; |
| 182 }; | 182 }; |
| 183 | 183 |
| 184 MemoryAllocator() _THROW0() { | 184 MemoryAllocator() {} |
| 185 } | |
| 186 | 185 |
| 187 // We can't use an explicit constructor here, as dictated by our style guide. | 186 // We can't use an explicit constructor here, as dictated by our style guide. |
| 188 // The implementation of basic_string in Visual Studio 2010 prevents this. | 187 // The implementation of basic_string in Visual Studio 2010 prevents this. |
| 189 MemoryAllocator(const MemoryAllocator<T>& other) _THROW0() { // NOLINT | 188 MemoryAllocator(const MemoryAllocator<T>& other) { // NOLINT |
| 190 } | 189 } |
| 191 | 190 |
| 192 template<class OtherT> | 191 template <class OtherT> |
| 193 MemoryAllocator(const MemoryAllocator<OtherT>& other) _THROW0() { // NOLINT | 192 MemoryAllocator(const MemoryAllocator<OtherT>& other) { // NOLINT |
| 194 } | 193 } |
| 195 | 194 |
| 196 ~MemoryAllocator() { | 195 ~MemoryAllocator() { |
| 197 } | 196 } |
| 198 | 197 |
| 199 void deallocate(pointer ptr, size_type size) { | 198 void deallocate(pointer ptr, size_type size) { |
| 200 uint8_t* mem = reinterpret_cast<uint8_t*>(ptr); | 199 uint8_t* mem = reinterpret_cast<uint8_t*>(ptr); |
| 201 mem -= sizeof(T); | 200 mem -= sizeof(T); |
| 202 if (mem[0] == HEAP_ALLOCATION) { | 201 if (mem[0] == HEAP_ALLOCATION) { |
| 203 free(mem); | 202 free(mem); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 } | 244 } |
| 246 | 245 |
| 247 void construct(pointer ptr, const T& value) { | 246 void construct(pointer ptr, const T& value) { |
| 248 ::new(ptr) T(value); | 247 ::new(ptr) T(value); |
| 249 } | 248 } |
| 250 | 249 |
| 251 void destroy(pointer ptr) { | 250 void destroy(pointer ptr) { |
| 252 ptr->~T(); | 251 ptr->~T(); |
| 253 } | 252 } |
| 254 | 253 |
| 255 size_type max_size() const _THROW0() { | 254 size_type max_size() const { |
| 256 size_type count = static_cast<size_type>(-1) / sizeof(T); | 255 size_type count = static_cast<size_type>(-1) / sizeof(T); |
| 257 return (0 < count ? count : 1); | 256 return (0 < count ? count : 1); |
| 258 } | 257 } |
| 259 }; | 258 }; |
| 260 | 259 |
| 261 #else // OS_WIN | 260 #else // OS_WIN |
| 262 | 261 |
| 263 // On Mac, Linux, we use a bare bones implementation that only does | 262 // On Mac, Linux, we use a bare bones implementation that only does |
| 264 // heap allocations. | 263 // heap allocations. |
| 265 template<class T> | 264 template<class T> |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 498 protected: | 497 protected: |
| 499 T* buffer_; | 498 T* buffer_; |
| 500 size_t size_; // how much of the buffer we're using. | 499 size_t size_; // how much of the buffer we're using. |
| 501 size_t alloc_size_; // how much space we have allocated. | 500 size_t alloc_size_; // how much space we have allocated. |
| 502 Allocator alloc_; | 501 Allocator alloc_; |
| 503 }; | 502 }; |
| 504 | 503 |
| 505 } // namespace courgette | 504 } // namespace courgette |
| 506 | 505 |
| 507 #endif // COURGETTE_MEMORY_ALLOCATOR_H_ | 506 #endif // COURGETTE_MEMORY_ALLOCATOR_H_ |
| OLD | NEW |