## Current/Unreleased ## Release v0.7.0 (2021-01-24) * 💥⚡️ **BREAKING**: Uses `double`) for _all_ scores. * 💥 Integers larger than a double mantissa (53-bits) will lose some precision. * ⚡️ big speed up * ⚡️ Much better memory usage * ⚡️ Simplifies score conversion between ruby and C * ✨ Added `DHeap::Map` for ensuring values can only be added once, by `#hash`. * Adding again will update the score. * Adds `DHeap::Map#[]` for quick lookup of existing scores * Adds `DHeap::Map#[]=` for adjustments of existing scores * TODO: `DHeap::Map#delete` * 📝📈 SO MANY BENCHMARKS * ⚡️ Set DEFAULT_D to 6, based on benchmarks. * 🐛♻️ convert all `long` indexes to `size_t` ## Release v0.6.1 (2021-01-24) * 📝 Fix link to CHANGELOG.md in gemspec ## Release v0.6.0 (2021-01-24) * 🔥 **Breaking**: `#initialize` uses a keyword argument for `d` * ✨ Added `#initialize(capacity: capa)` to set initial capacity. * ✨ Added `peek_with_score` and `peek_score` * ✨ Added `pop_with_score` and `each_pop(with_score: true)` * ✨ Added `pop_all_below(max_score, array = [])` * ✨ Added aliases for `shift` and `next` * 📈 Added benchmark charts to README, and `bin/bench_charts` to generate them. * requires `gruff` which requires `rmagick` which requires `imagemagick` * 📝 Many documentation updates and fixes. ## Release v0.5.0 (2021-01-17) * 🔥 **Breaking**: reversed order of `#push` arguments to `value, score`. * ✨ Added `#insert(score, value)` to replace earlier version of `#push`. * ✨ Added `#each_pop` enumerator. * ✨ Added aliases for `deq`, `enq`, `first`, `pop_below`, `length`, and `count`, to mimic other classes in ruby's stdlib. * ⚡️♻️ More performance improvements: * Created an `ENTRY` struct and store both the score and the value pointer in the same `ENTRY *entries` array. * Reduced unnecessary allocations or copies in both sift loops. A similar refactoring also sped up the pure ruby benchmark implementation. * Compiling with `-O3`. * 📝 Updated (and in some cases, fixed) yardoc * ♻️ Moved aliases and less performance sensitive code into ruby. * ♻️ DRY up push/insert methods ## Release v0.4.0 (2021-01-12) * 🔥 **Breaking**: Scores must be `Integer` or convertable to `Float` * ⚠️ `Integer` scores must fit in `-ULONG_LONG_MAX` to `+ULONG_LONG_MAX`. * ⚡️ Big performance improvements, by using C `long double *cscores` array * ⚡️ many many (so many) updates to benchmarks * ✨ Added `DHeap#clear` * 🐛 Fixed `DHeap#initialize_copy` and `#freeze` * ♻️ significant refactoring * 📝 Updated docs (mostly adding benchmarks) ## Release v0.3.0 (2020-12-29) * 🔥 **Breaking**: Removed class methods that operated directly on an array. They weren't compatible with the performance improvements. * ⚡️ Big performance improvements, by converting to a `T_DATA` struct. * ♻️ Major refactoring/rewriting of dheap.c * ✅ Added benchmark specs ## Release v0.2.2 (2020-12-27) * 🐛 fix `optimized_cmp`, avoiding internal symbols * 📝 Update documentation * 💚 fix macos CI * ➕ Add rubocop 👮🎨 ## Release v0.2.1 (2020-12-26) * ⬆️ Upgraded rake (and bundler) to support ruby 3.0 ## Release v0.2.0 (2020-12-24) * ✨ Add ability to push separate score and value * ⚡️ Big performance gain, by storing scores separately and using ruby's internal `OPTIMIZED_CMP` instead of always directly calling `<=>` ## Release v0.1.0 (2020-12-22) 🎉 initial release 🎉 * ✨ Add basic d-ary Heap implementation