- Added support for the "report.X.limit" configuration variable, to
restrict the number of rows a report generates.
- Added support for Table::render (limit) to limit the number of rows
that are rendered.
- Removed "oldest" and "newest" report code.
- Added "oldest" and "newest" custom report details to Config.cpp
- Updated various documentation.
- Added new column 'recur' for use in custom reports.
- Implemented Table::ascendingPeriod, Table::descendingPeriod allowing
sorting on the recur column.
- Added unit tests to both use the new column and test the sorting.
- Code cleanup.
- Made Table::optimize a public method.
- Table::optimize called only from handleReportGHistory, where it's
needed.
- Retaining benchmark.txt, to allow further improvements.
- Added Timer class to display high resolution timing information.
- Found terrible bug in Table::optimize that was taking up 99.7%,
on average, of the Table::rendering time, including sorting. This
fix naturally causes a 187-fold speedup of rendering.
- Changed report.cpp in handleCustomReport to only load pending tasks,
instead of all pending tasks. Subtle, but important difference.
- The sort algorithm (Combsort11) was broken because it didn't
consider all the possible variations of present/missing, same/
different combinations of data, when performing a compare. This
led to an unstable sort, which is an infinite loop in Combsort11.
time ./task lo
old new
real 0.262 0.018
user 0.201 0.013
sys 0.048 0.004
~1200-1400% faster
time ./task completed
old new
real 3.991 4.014
user 2.821 2.832
sys 1.165 1.169
~0.3-0.5% slower