# Upcoming Changes

# 0.7-4

CMake Improvements:

* Fix deprecation warnings, update doctest, and CI. (#188)
* Remove static linking for cross compilation. (#162, #164)
* Fix include paths, cache variables. (#165, #190)
* Assume `thread_local` is supported. (#167)

Bugfixes:

* Support `fixed_block_allocator` in `memory_pool_collection`. (#173)
* Fix `virtual_block_allocator` deallocation. (#175)
* Fix `std::shared_ptr` node size alignment mismatch. (#171)
* Fix unit tests on android. (#176)
* Don't use undefined preprocessor macros. (#186)
* Fix unused variable warnings. (#183, #184, #189)

Improvements:

* Allow incomplete types in `allocator_deallocator`. (#153)
* Give `allocator_polymorphic_deallocator/deleter` a default constructor. (#155)
* Expose `memory_pool::owns`. (#174)

# 0.7-3

CMake improvements:

* Increase the CMake minimum required version to 3.14 to reflect reality. (#147)
* Fixes to container node size generation using CMake on MacOS. (#138)
* Don't regenerate container node sizes when they already exist.

Bugfixes:

* Workaround a compiler bug in MSVC. (#146)
* Fix broken multi-threading configuration. (#142)
* Check initial block size for `memory_pool_collection` properly. (#148)
* Fix bug in `memory_block_stack::owns()`. (#151)

# 0.7-2

Deprecate `virtual_memory_page_size`; use `get_virtual_memory_page_size()` instead. (#132)

CMake improvements:

* Generate container node sizes using CMake, which makes cross-compiling easier (#129)
* Set `CMAKE_RUNTIME_OUTPUT_DIRECTORY` properly to support shared libraries (#132)

# 0.7-1

Just bugfixes:

* CMake: automatically link libatomic on platforms where that is necessary (#95)
* catch small block sizes of `memory_pool` (#113)
* fix buffer overflow in `memory_pool_collection`'s array allocation (#99)
* fix compatibility with Windows UWP (#102)
* fix computation of `memory_pool::min_block_size` (#110)
* fix debug assertion in free lists (#111)

# 0.7

BREAKING: Removed the use of the compatibility library to automatically generate macros and workaround for older compilers.
The important compatibility workarounds like the `__builtin_clz` extension are still used, but workarounds for missing C++11 library features have been removed.
In particular, the library now requires compiler support for `noexcept`, `constexpr`, `alignof` and `thread_local`.
This means that GCC 4.8 and Visual Studio version 12.0 (both released in 2013), are now longer supported.

## Adapter

BREAKING: Remove `Mutex` support from `allocator_reference` and consequently from `std_allocator`, `allocator_deleter`, ...
Embedding the `Mutex` with the reference was *fundamentally* broken and unusable to ensure thread safety.
Use a reference to a `thread_safe_allocator` instead, which actually guarantees thread safety.

## Allocator

Add ability to query the minimal block size required by a `memory_pool` or `memory_stack` that should contain the given memory.
Due to internal data structures and debug fences this is more than the naive memory request, so it can be computed now.

## Bugfixes

* more CMake improvements for cross-compiling, among others
* bugfixes to support UWP (#80), VxWorks (#81) and QNX (#85, #88, among others)
* better support missing container node size (#59, #72, among others)
* fix alignment issues in debug mode
* fix tracking for allocators without block allocators

---

# 0.6-2

Various bug fixes, compiler warning workarounds and CMake improvements accumulated over past two years.
Most notable changes:

* cross compilation works now
* `fallback_allocator` is default constructible if stateless
* add `unique_base_ptr` to support a unique ptr to a base class
* add `allocate_unique` overloads that take a custom mutex
* allocator deleters are default constructible

---

# 0.6-1

* fix CMake configuration error
* fix double free error in `segregator`
* add `static_assert()` when default constructing a stateful `std_allocator`
* fix various compiler warnings

# 0.6

## Tool

* better MSVC support
* improved compilation time

## Core

* add literal operators for memory sizes (`4_KiB`)
* more flexible `make_block_allocator`
* composable allocator concept

## Allocator

* improved `temporary_allocator`: explicit separation into `temporary_stack`, improved automatic creation
* new `memory_stack_raii_unwind` for automatic unwinding
* new `iteration_allocator`
* make allocators composable
* add facilities for joint memory allocations

## Adapter

* add `shared_ptr_node_size`
* add `string` container typedef
* add `fallback_allocator`
* add `segregator`

## Bugfixes

* OSX support
* various warnings fixed

---

# 0.5
* improved CMake build system, now supports cmake installation and `find_package()`
* improved low-level allocators and added `malloc_allocator`
* add virtual memory interface and allocators
* add allocators using a fixed-sized storage block
* introduced `BlockAllocator` concept and various implementations
* new class template `memory_arena` that is used inside the higher level allocators, allows more control over the internal allocations
* add wrappers/adapters for the polymorphic memory resource TS
* improved tracking classes
* other improvements like concept checks and more exception classes
* internal changes

---

# 0.4

* polished up the interface, many breaking changes in the form of renaming and new header files
* added unified error handling facilities and handler functions in case exceptions are not supported
* improved old allocator adapters by introducing allocator_storage template
* improved allocator_traits making them more powerful and able to handle Allcoator types directly
* added type-erased allocator storage
* added node-size debugger that obtains information about the container node sizes
* most parts now work on a freestanding implementation
* used foonathan/compatibility for CMake compatibility checks
* added miscellaneous tiny features all over the place
* many internal changes and bugfixes

---

# 0.3

* added debugging options such as memory filling and deallocation and leak check
* improved performance of pool allocators
* changed complete project structure and CMake
* many internal changes and bugfixes and automated testing

---

# 0.2

* added temporary_allocator as portable alloca
* added small_node_pool type optimized for low-overhead small object allocations
* added various allocator adapters including a thread_safe_allocator for locking
* better compiler support
* many internal changes and bugfixes

---

# 0.1-1

* critical bugfix in memory_stack
* added smart pointer example

---

# 0.1

* first beta version
