Changes:
Improvements to the speed of the sparse_vector_scanner searches, particularly the searches involving sparse_vector_floats due to adding new internal methods.
Reasons for improvements:
- Removed the creation of a new internal unsigned int scanner with every single search, and now the internal scanner is only created once
- Added an internal mask so that when a float search based on a previous search occurs, it does not search the entire sparse vector
- Reduced the amount of times decompression of an internal bvector occurs
Comparing Time to run 1000 find_range_float searches from 9.1.0 and 9.2.1:
- std:vector linearly goes over every element in the vector
| Implementation | Linear Data 9.1.0 | Random Data 9.1.0 | Linear Data 9.2.1 | Random Data 9.2.1 |
|---|---|---|---|---|
| std::vector | 52 | 83.34 | 52 | 83.34 |
| sparse_vector_scanner | 0.8433 | 12.88 | 0.64 | 14.66 |
| std::vector (35% NaN) | 58.46 | 69.18 | 58.46 | 69.18 |
| RSC sparse_vector_scanner (35% Null) | 89.5 | 479.28 | 41.59 | 150 |
New Methods:
Created a new method in the sparse_vector_scanner class, find_range_float_unbounded which finds every value in an open interval, unlike the existing find_range_float method
New Sample:
Created a new xsample, xsample11 which demonstrates uses for sparse_vector_float objects with financial data
Bug fixes:
Fixed a major bug in bvector<>::bit_or_and() where the target block was not preserved when AND produces empty block