ixion 0.19.0

* C++ API

  * added support for renaming sheets after they have been created.

* formula interpreter

  * added support for inline arrays.

ixion 0.18.1

* fixed a 32-bit Linux build issue as discovered on Debian, due to a clash on
  two 32-bit unsigned integer types being used with std::variant.

ixion 0.18.0

* C++ API

  * removed the formula_model_access interface from model_context, and switched
    to using model_context directly everywhere.

  * revised formula_tokens_t type to remove use of std::unique_ptr for each
    formula_token instance.  This should improve memory locality when
    iterating through an array of formula token values.  A similar change has
    also been made to lexer_tokens_t and lexer_token types.

* formula interpreter

  * added the following 41 built-in functions:

    * ABS
    * AND
    * COLUMN
    * COLUMNS
    * COUNT
    * COUNTBLANK
    * EXACT
    * FALSE
    * FIND
    * ISBLANK
    * ISERROR
    * ISEVEN
    * ISFORMULA
    * ISLOGICAL
    * ISNA
    * ISNONTEXT
    * ISNUMBER
    * ISODD
    * ISREF
    * ISTEXT
    * LEFT
    * MEDIAN
    * MID
    * MODE
    * N
    * NA
    * NOT
    * OR
    * REPLACE
    * REPT
    * RIGHT
    * ROW
    * ROWS
    * SHEET
    * SHEETS
    * SUBSTITUTE
    * T
    * TEXTJOIN
    * TRIM
    * TRUE
    * TYPE

* added support for multi-sheet references in Excel A1 and Excel R1C1
  grammers.

ixion 0.17.0

* C++ API

  * set the baseline C++ version to 17.

  * mdds has been internalized so that the public header no longer contains
    references to mdds.  With this change, the users can use different API
    versions of mdds between the ixion build and run-time use.

  * cleaned up public API to make use of std::string_view and std::variant
    where appropriate.

* formula interpreter

  * implemented built-in LEFT() function.

* misc

  * it is no longer required to set the size of void* at build time to ensure
    the binaries to be fully functional.

  * fixed a bug where named expressions with names containing invalid
    characters were still allowed in.

ixion 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 non-equal in test
  code.

ixion 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.

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.

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.

ixion 0.13.0

* add support for named expressions.

* add support for boolean cell value type.

* fix a bug in sheet data range computation function which incorrectly
  reported data range when the first column is entirely filled to the
  max row.

* add experimental support for cmake-based build.  Currently tested
  only on Windows.

ixion 0.12.2

* fix a parser bug that prevented valid R1C1 address from being
  parsed.

ixion 0.12.1

* add --enable-threads configure switch, to optionally enable/disable
  thread support.  Threads are enabled by default.

ixion 0.12.0

* remove boost::thread dependency from the public headers.

* refactor the multi-threaded calculation code to make it more robust.

* properly wait on formula calculation when fetching for a result
  cache, without which threaded calculations would sometimes generate
  wrong results.

ixion 0.11.1

* add get_columns() method to the model_context class to return an
  array of column_store_t.

* make it buildable with mdds-1.2.

ixion 0.11.0

* C++11 is a hard requirement.

* implement R1C1 formula name resolver.

* remove boost dependency from the public headers (except for
  boost::thread).

* fix incorrect life-cycle management of pooled string instances.

* make it buildable on OSX.

* other general code cleanups.

* python

  * correctly catch and translate general_error into python's, for
    Document.append_sheet() method.

  * make python module build configurable.

  * add ixion.column_label() to convert numeric column indices into
    column labels.  A1 and R1C1 are supported.

ixion 0.9.1

* include python bindings test in the tarball.

* fix various portability problems in python bindings.

* several minor build fixes.
