Changelog:
0.16.1
fixed a build issue on 32-bit linux platforms, caused by slicing
of integer string ID values.
worked around floating point rounding errors which prevented
two theoretically-equal numeric values from being evaluated as
equal in test code.
0.16.0
documentation
added quickstart sections for using model_context and
document classes.
added code example for cell_access class.
C++ API
added new function to allow printing of single formula
tokens.
added method for setting cached results on formula cells
in model_context.
changed the model_context design to ensure that all sheets
are of the same size.
added an accessor method to formula_model_access interface
(and implicitly in model_context) that directly returns a
string value from cell.
added cell_access class for querying of cell states without
knowing its type ahead of time.
added document class which provides a layer on top of
model_context, to abstract away the handling of formula
calculations.
deprecated model_context::erase_cell() in favor of
empty_cell().
formula parser / interpreter
added support for 3D references - references that contain
multiple sheets.
added support for the exponent (^) and concatenation (&)
operators.
fixed incorrect handling of range references containing
whole columns such as A:A.
added support for unordered range references - range
references whose start row or column is greater than their
end position counterparts, such as A3:A1.
fixed a bug that prevented nested formula functions from
working properly.
implemented Calc A1 style reference resolver.
misc
formula results now directly store the string values when
the results are of string type. They previously stored
string ID values after interning the original strings.
removed build-time dependency on spdlog.
Changelog:
ixion 0.15.0
* fill_down_cells() method has been added to model_context, to fill duplicate
values downward from an arbitrary cell position. For now, it always
duplicate the value of the source cell; cell value enumerations are not
supported. Also, filling down of formula cells is not yet supported.
* cell iterator has been aded to model_context, for efficient horizontal and
vertical iterations of cell values in an arbitrary range within a sheet.
* improved the cmake-based build, with all test cases integrated.
* switched to spdlog for compile-time debug log outputs.
* improved performance by removing repeated fetching of each formula
cell prior to interpretation.
* reworked topological sorting of formula cells to avoid having to
unnecessarily build dependency relations twice; once during the
dirty cell determination and twice prior to interpretation of
formula cells. The new code performs topological sorting during the
dirty cell determination phase.
* reworked the cell reference tracker to use R-tree. This allows more
accurate tracking of references involving grouped formulas.
* fixed a resource leak with dynamic loading of compute engine modules.
Changelog:
ixion 0.14.1
* addressed a number of coverity issues.
* Fixed build issues on 32-bit platforms.
* fixed warnings on shadowed variables during build with -Wshadow
compiler option.
ixion 0.14.0
* implemented MMULT built-in formula function which makes use of the
grouped formula support.
* added support for grouped formulas.
* added experimental compute engine framework to potentially accelerate
certain computations in the future. It's not used yet.
* refactored formula cell storage to use ref-countered formula cell
objects.
Changelog:
commit 789a08ebc3e7fc2a3914fc34b2497bf476952bfc
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Tue Aug 15 19:18:03 2017 -0400
Update the changelog.
commit bc55f21bbefc4ca9e73164453c60c859cd8ec5dc
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Tue Aug 15 19:10:39 2017 -0400
Up the version to 0.13.0.
commit 1bee3e9977e10818b75c7f44fcaaa9fa1aa49801
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Aug 4 21:23:17 2017 -0400
Another failing test case and a fix for it.
commit 9819ad4284d173e81106d4dd55a67ab2048dd8d3
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Aug 4 21:06:14 2017 -0400
With this change, the newly-added test now passes.
commit 1e57b24c3acb9797847eed776d92750c8fc2afc0
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Thu Aug 3 20:58:58 2017 -0400
Add a test that currently fails.
commit 7a075c84cfe4a1963d18c107004200c87c7e9b73
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Thu Jul 13 18:29:09 2017 -0400
Remove code duplicates.
commit 352b95e4adf49a697166313fa590068553a8cc05
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Thu Jul 13 17:51:44 2017 -0400
Test boolean values with SUM.
commit bc7b844c203e5a0cd8dd9ebd68f8452a1cba8dba
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Thu Jul 13 17:50:15 2017 -0400
Get boolean values to work in COUNTA function.
commit 2f488e2af2353e52be14222b01f525b556758cfe
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jul 12 21:48:04 2017 -0400
cmake: enable parallel build with MSVC backend.
commit beb852797fc2232c93a89719a4a95421fac8c304
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jul 12 21:39:19 2017 -0400
cmake: silence some known compiler errors for MSVC.
commit 7687a5a674c84503a01f47c56a1808cbf6c45d0e
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jul 12 21:07:43 2017 -0400
Add initial boolean value type support.
Still experimental, and not all corner cases are expected to be
working.
commit 1cdb0489d2b825c04079e5ac38940df75c409aca
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jul 12 18:45:03 2017 -0400
More descriptive exception message.
commit 7a92289de22b9be106cdb9bf8e9a19bc6f12669c
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Thu Jun 8 16:47:16 2017 -0400
Tweak the wording a bit.
commit 14b28d947ae04be1d13469461b055a1b28ef73b0
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jun 7 21:24:25 2017 -0400
Add a contribution guide.
commit 8b22a794a3b4545748e06367ac64fb118f2a0b10
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jun 7 21:12:59 2017 -0400
cmake: add ixion-sorter and ixion-formula-tokenizer executables.
commit 4abf226d052663f42ba9c2433a04033758f96824
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jun 7 21:03:38 2017 -0400
cmake: add ixion-parser target.
And fix one build error.
commit ffb9ad7e66285526ca8b2a97f8164b90cc31ba8d
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jun 7 20:40:03 2017 -0400
cmake: define necessary compiler definitions for a DLL build.
commit 3270d6b1f541fc011da062942cb96ac02d690712
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jun 7 20:27:23 2017 -0400
Perform pre-build file generation the same way autoconf does.
We need this for non-autoconf build system i.e. cmake.
commit 31495ad282df5acc66e9b8d40fbdd4e7095572d7
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jun 7 18:40:56 2017 -0400
Fix the build on vs2017.
commit 699333f0b227ccde92271cf83719180cda835ebd
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jun 7 17:49:11 2017 -0400
cmake: add all the source files for libixion target.
Still not buildable.
commit c1f85fe0c245c56736a192456feceeb185ecc553
Author: Markus Mohrhard <markus.mohrhard@googlemail.com>
Date: Thu Jun 8 04:21:59 2017 +0200
fix missing header include
commit d300ed3caadba1f73a30000280477f059f300418
Author: Markus Mohrhard <markus.mohrhard@googlemail.com>
Date: Thu Jun 8 04:10:55 2017 +0200
we might no longer need the old ABI
commit 7212efdbd79c4af43588cfd68886d2c0795a930b
Author: Markus Mohrhard <markus.mohrhard@googlemail.com>
Date: Thu Jun 8 03:52:51 2017 +0200
more debugging help
commit aa1c9681a77f71fdefe794b9fc124679ab56cbc4
Author: Markus Mohrhard <markus.mohrhard@googlemail.com>
Date: Thu Jun 8 03:48:15 2017 +0200
help in debugging failure in ci job
commit bd73d17226c751ae4fc7b3dbc8697d26f109d8ea
Author: Markus Mohrhard <markus.mohrhard@googlemail.com>
Date: Thu Jun 8 03:30:09 2017 +0200
recognize gcc 5.4 and gcc 6.3 in boost.m4
commit 927808c7d6d4a78acb824d1416f3c86bb3766176
Author: Markus Mohrhard <markus.mohrhard@googlemail.com>
Date: Thu Jun 8 03:25:25 2017 +0200
update boost.m4
commit 432ed93f59c0cbe764cc3718bc7f653f99ca71b1
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Thu Feb 9 21:30:18 2017 -0500
Support named expression parsing with Excel R1C1.
commit a726d8d64a441ad6febc6797e4f1152adaf0ae32
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Tue Feb 7 19:33:36 2017 -0500
When the sheet name is given and isn't found in the model, it's invalid.
commit 150e0ac7793e8ed6aea10a18c1fc92fd841a2480
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Mon Feb 6 21:50:08 2017 -0500
parse_formula_string() and print_formula_tokens() to return value.
With C++11's move semantics, this makes more sense...
commit a21ee8087c2d18f7b52f5a4cf1045e79b7a804fa
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Feb 3 21:50:09 2017 -0500
Add test case to handle invalid name error.
commit 10e9a8c9f69c2ebe60accc38c78eee83b4f2388e
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Feb 3 21:49:38 2017 -0500
Handle '#NAME?' error in the formula result.
commit 0a7a8b2c6727d6d2d017324e5beaf9cdba4a7bd0
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Feb 3 21:14:28 2017 -0500
Fix wrong error message.
commit cbc4fb5c9d131d6f038c6d74836d597309cee3b4
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Feb 3 21:08:12 2017 -0500
Use parse_assignment() method to simplify the code a bit.
commit edb4f8853fa580c08296aae38d21e89547ee8092
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Feb 3 20:15:25 2017 -0500
Generate #NAME? error on non-existing named expression.
commit 3b5c7a37c6f136932eaad6c554537dc28d19b7c5
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Feb 3 18:55:51 2017 -0500
Throw a more specialized exception for non-existing named expression.
commit 4e069dbf47c29c0523b033ad283fff6b0ee626da
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Feb 3 18:36:46 2017 -0500
Let's remove this. This has become bit-rotted.
commit 36f578bccfe73ade51b9176453951a4e5643ac0b
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Feb 3 18:35:23 2017 -0500
Add new error type for #NAME?.
commit 2c83e6fb3c7d498a07aeff719b5fbaa34cb35563
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Feb 3 18:25:04 2017 -0500
Print named expression names.
commit c57d435fca8163d0fbab849183c924c51d4e4fc6
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Feb 3 18:20:24 2017 -0500
Print individual token data via formula-tokenizer.
commit 079b58d8ca2097c73b410d8064d26d5dbf1d9065
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Feb 3 17:31:45 2017 -0500
Make sure the 'exit' command really exits.
commit 12768b2c7f7ccecbf6b6bc5b2a81cdb0a33b82a4
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Thu Feb 2 22:32:18 2017 -0500
Check the sheet index against the sheet count.
commit f5a72147fe4f46ea16ce061c4071054fa723a67c
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Thu Feb 2 22:17:12 2017 -0500
We can't assume that mp_cxt is never nullptr.
commit 7aef80602ad02e2bac0f200b5319e8cca7f58a8f
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Thu Feb 2 21:13:32 2017 -0500
We don't need this interface method now.
commit b55d48d1c39cdbf811d8fac556d47f4a546fd674
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Thu Feb 2 20:29:48 2017 -0500
Check the results and test the recalc after editing.
Now I can add this to the official list of test cases.
commit 4ae122f9d9af80e067ed6a1ecd4899d90c1a0ba0
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Thu Feb 2 20:12:56 2017 -0500
Pass the "show sheet name" flag to the session handler too.
commit 3f60def1bf25d3cab79bc12c7d8a87a69ff19639
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Thu Feb 2 18:36:58 2017 -0500
Test file for sheet-local named expression.
commit d64f1b93f8fdb36b708e8755cbab6d8c5432c71a
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Feb 1 18:45:37 2017 -0500
Handle sheet-local named expressions.
commit 01debe03a12d5b672630063f4e072d8ea6a31c74
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Mon Jan 30 22:44:45 2017 -0500
Add new session command to toggle sheet name display.
commit 0bdd9bd21f8dd7442a75619c63392c339a187382
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jan 25 22:18:33 2017 -0500
Use override keywords.
commit 0ca4162e1650d9a47d52d858ef746435bb85d2d1
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jan 25 22:13:34 2017 -0500
Make this test case an official part of the test collection.
commit d01a86a5ca8db35f7a980acec43aacefe71760e8
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jan 25 22:12:48 2017 -0500
Test for editing and re-calculation.
commit 7e64bbe109eabcdfd78f2f5db5727da36753dade
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jan 25 20:04:22 2017 -0500
Make sure that address position outside the sheet boundaries is invalid.
commit b38de9a120440cd1f964d57108876ec75142c688
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jan 25 19:26:29 2017 -0500
Ensure that the column value won't overflow.
commit db8837fa7bf43b67793f02a9a144076607cf0a41
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jan 25 19:04:16 2017 -0500
Add test for named expressions.
It currently fails on 'MyRange2'.
commit 9417577fa8a78df5657df3cf2c6d10fe785d8f9b
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jan 25 16:38:48 2017 -0500
Remove bitrotted debug code...
commit 71f5957549e7de302c419fc848b8269167b21aa2
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Tue Jan 24 23:00:29 2017 -0500
Refactor a bit to expand named expression during reference retrieval.
commit a50d0c8f7e73960e6049db95dd9521caa1b656d0
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Tue Jan 24 21:28:08 2017 -0500
And push the named expression into the model for real.
commit 9cb27dedabb4ba99ef6c77b7ddab2ee718bd91c0
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Thu Jan 19 22:20:37 2017 -0500
Parse the named expression block.
Next step is to push it into the model.
commit d0f40e3d3f4f07586b7c784f7b381eaeabd453b6
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jan 18 18:45:39 2017 -0500
Store formula_tokens_t for named expression instead of formula_cell.
And this will bump up the API version.
commit b1997764afc3c8660a5f9b90f68a6ea455cb8b2e
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Wed Jan 18 18:18:54 2017 -0500
Parse named expression blocks.
commit 1c13ab7efd9f5f5d128b298ae670671ffb6f5ea2
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Tue Jan 17 21:44:37 2017 -0500
Parse session block.
commit 7f91f8389cade81691b09bd5f45bd7ef43525219
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Tue Jan 17 20:36:10 2017 -0500
Refactor the model parser a bit...
commit f5b7e16ac36b052b2e33a7d3eb21e00826b511a5
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Mon Jan 16 22:46:40 2017 -0500
Test file that I need to support. It doesn't work yet.
commit 66f8238d7309165ddd005a2b7ddcb024a388e798
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Mon Jan 16 22:46:16 2017 -0500
Prepare for upcoming session mode.
commit 26cb9b2d026a185841def623aba01d5c9d3e7ee9
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Mon Jan 16 22:20:14 2017 -0500
Require an explicit 'exit' command.
commit da294fc2d80772b4cdc43e23595cb23d619a4760
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Mon Jan 16 19:59:38 2017 -0500
Implement setters for the sheet-local named expressions.
commit 16353df35408c3c6f6afd7727ad9d2dc6ecd1a3a
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Mon Jan 16 18:47:11 2017 -0500
Implement getter methods for sheet-local named expressions.
commit 3d7e11aef952947c4c1041c5149bd7fb042620ba
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Mon Jan 16 18:07:47 2017 -0500
Move the named expression type into a common place.
commit 5fed7a42cc4582ba785074661248e52d07d4f32d
Author: Kohei Yoshida <kohei.yoshida@gmail.com>
Date: Fri Jan 13 19:51:37 2017 -0500
Add rudimentary formula string tokenizer.
Use for debugging.
The actual fix as been done by "pkglint -F */*/buildlink3.mk", and was
reviewed manually.
There are some .include lines that still are indented with zero spaces
although the surrounding .if is indented. This is existing practice.
Up the version to 0.12.2.
Update the CHANGELOG.
Fix lexer tokenizer to get R1C1 addresses properly parsed.
For now, a lexer name that contains a '[' and ']' pair can have any
characters in-between, in order to have e.g. 'R[-5]C' properly
parsed as a name.
Fix a range address parsing error.
It previously failed to parse 'R[-5]C:R[-1]C'.
Add a test case that ixion currently fails to parse.
Export these hash::operator(...) symbols.
add CI config
Ixion is a general purpose formula parser & interpreter that can
calculate multiple named targets, or "cells".
The goal of this project is to create a library for calculating
the results of formula expressions stored in multiple named targets,
or "cells". The cells can be referenced from each other, and the
library takes care of resolving their dependencies automatically
upon calculation. The caller can run the calculation routine either
in a single-threaded mode, or a multi-threaded mode. The library
also supports re-calculations where the contents of one or more
cells have been modified since the last calculation, and a partial
calculation of only the affected cells need to be calculated.