
                 __________
    _____   __ __\______   \_____  _______  ______  ____ _______
   /     \ |  |  \|     ___/\__  \ \_  __ \/  ___/_/ __ \\_  __ \
  |  Y Y  \|  |  /|    |     / __ \_|  | \/\___ \ \  ___/ |  | \/
  |__|_|  /|____/ |____|    (____  /|__|  /____  > \___  >|__|
        \/                       \/            \/      \/

  Copyright (C) 2010
  Ingo Berg

History:
--------

Rev 1.00 : July 21 2004
-----------------------

    * Initial release


Rev 1.01 : July 23 2004
-----------------------

    * Support for user defined functions has been added; new functions: AddFun(), ClearFun(),
      InitFunctions().
    * Built in constants have been removed; the parser contained undocumented built in
      constants pi, e.
      There was the possibility of name conflicts with user defined variables.
    * Setting multiple variables with SetVar can now be done with a map of names and pointers as the only
      argument. For this reason, a new type Parser::varmap_type was added. The old version that took 3
      arguments (array of names, array of pointers, and array length) is now marked as deprecated.
    * The names of logarithm functions have changed. The new names are: log2 for base 2, log10 or log for
      base 10, and ln for base e.


Rev 1.02 : July 30 2004
-----------------------

    * Support for user defined constants added; new functions: InitConst(), AddConst(), SetConst(),
      ClearConst().
    * Single variables can now be added using AddVar(); you have now the choice of adding them either
      one by one or all at the same time using SetVar(const varmap_type &a_vVar).
    * Internal handling of variables changed, is now similar to function handling.
    * Virtual destructor added; InitFun(), InitConst() are now virtual too thus making it possible to
      derive new parsers with a modified set of default functions and constants.
    * Support for user defined functions with 2 or 3 parameters added; bytecode format changed to hold
      function parameter count.


Rev 1.03 : August 10 2004
-------------------------

    * Support for user-defined unary post value operators added; new functions: AddPostOp(), InitPostOp(),
      ClearPostOp().
    * Minor changes to the bytecode parsing routine.
    * User defined functions can now have up to four parameters.
    * Performance optimized: simple formula optimization added; (precalculation of constant parts of the
      expression).
    * Bug fixes: Multi-arg function parameters, constant name lookup, unary minus did not work correctly.


Rev 1.04 : August 16 2004
-------------------------

    * Support for functions with variable number of arguments added.
    * Internal structure changed; new: ParserBase.h, ParserBase.cpp; removed: ParserException.h;
      changed: Parser.h, Parser.cpp.
    * Bug in the bytecode calculation function fixed (affected the unary minus operator).
    * Optimizer can be deactivated; new function: EnableOptimizer(bool bStat).


Rev 1.05 : August 20 2004
-------------------------

    * Variable/constant names will now be checked for invalid characters.
    * Querying the names of all variables used in an expression is now possible; new function: GetUsedVar().
    * Disabling bytecode parsing is now possible; new function: EnableByteCode(bool bStat).
    * Predefined functions with variable number of arguments added: sum, avg, min, max.
    * Unary prefix operators added; new functions: AddPrefixOp(...), ClearPrefixOp().
    * Postfix operator interface names changed; new function names: AddPostfixOp(...), ClearPostfixOp().
    * Hardcoded sign operators removed in favor of prefix operators; bytecode format changed accordingly.
    * Internal changes: static array removed in Command code calculation routine; misc. changes.


Rev 1.06 : August 20 2004
-------------------------

    * Volatile functions added; All overloaded AddFun(...) functions can now take a third parameter
      indicating that the function can not be optimized.
    * Internal changes: muParserStack.h simplified; refactorings
    * Parser is now distributed under the MIT License; all comments changed accordingly.


Rev 1.07 : September 4 2004
---------------------------

    * Improved portability; Changes to make life for MSVC 6 user easier, there are probably still some
      issues left.
    * Improved portability; Changes in order to allow compiling on BCB.
    * New function; value_type Diff(value_type *a_Var, value_type a_fPos) 4th order Differentiation with
      respect to a certain variable; added in muParser.h.


Rev 1.08 : November, 2004
-------------------------

    * unpublished; experimental template version with respect to data type and underlying string
      type (string <-> widestring).


Rev 1.09 : November 20, 2004
----------------------------

    * New member function:  RemoveVar(...) can be used for removing a single variable from the internal storage.
    * Internal structure changed; changing base datatype at compile time is now possible.
    * Bug fix: Postfix operator parsing could fail in certain cases; This has been fixed now.
    * Internal change:  Removed most dependancies from the C-string libraries.
    * Internal change:  Bytecode is now stored in a seperate class: ParserByteCode.h.
    * Internal change:  GetUsedVar() does no longer require that variables are defined at time of call.
    * Internal change:  Error treatment changed. ParserException is no longer derived from std::runtime_error;
                        Internal treatment of Error messages changed.
    * New functions in Parser interface; ValidNameChars(), ValidOprtChars() and ValidPrefixOprtChars()
      they are used for defining the charset allowed for variable-, operator- and function names.


Rev 1.10 : December 30, 2004
----------------------------

Release Notes:
This version does not contain major new feature compared to V1.07 but its internal structure has
changed significantly. The String parsing routine is slower than the one of V1.07 but bytecode
parsing is equally fast. On the other hand the error messages of V1.09 are more flexible and you
can change its value datatype. It should work on 64-bit systems. For this reason I supply both
versions for download. If you use V1.07 and are happy with it there is no need for updating
your version.

    * New example program: Archive now contains two demo programs: One for standard C++ and one for
                           managed C++.
    * New member function: RemoveVar(...) can be used for removing a single variable from the internal                            storage.
    * New member function: GetVar() can be used for querying the variable names and pointers of all
                           variables defined in the parser.
    * New member function: GetConst() can be used for querying all defined constants and their values.
    * New member function: GetFunDef() can be used for querying all defined functions and the number of
                           arguments they expect.
    * Internal structure changed; hanging base datatype at compile time is now possible.
    * Bugfix: Postfix operator parsing could fail in certain cases; This has been fixed now.
    * Bugfix: Variable names must will now be tested if they conflict with constant or function names.
    * Internal change:  Removed most dependencies from the C-string libraries.
    * Internal change:  Bytecode is now stored in a separate class: ParserByteCode.h
    * Internal change:  GetUsedVar() does no longer require that variables are defined at time of call.
    * Internal change:  Error treatment changed. ParserException is no longer derived from
                        std::runtime_error; Internal treatment of Error messages changed.
    * New functions in Parser interface: ValidNameChars(), ValidOprtChars() and ValidPrefixOprtChars()
                        they are used for defining the charset allowed for variable-, operator- and
                        function names.


Rev 1.2 / 1.21: April, 2005
---------------------------

Release Notes:
First of all the interface has changed so this version is not backwards compatible.
After receiving a couple of questions about it, this version features support for user defined binary
operators. Consequently the built in operators can now be turned off, thus you can deactivate them and
write complete customized parser subclasses that only contain the functionality you want. Another new
feature is the introduction of callback functions taking string arguments, implicit generation of
variables and the Assignement operator.

  Functionality
    * New built in operator: xor; Logical xor.
    * New built in operator: Assignement operator; Defining variables in terms of other variables/constants
    * New feature: Strings as arguments for callback functions
    * New feature: User defined binary operators
    * New feature: ParserInt a class with a sample implementation for
                     integer numbers.
    * New feature: Callbacks to value regognition functions.

    * Removed:  all predefined postfix operators have been removed.
    * New project file:  Now comes with a ready to use windows DLL.
    * New project file:  Makefile for cygwin now included.
    * New example:  Example3 shows usage of the DLL.

  Interface changes
    * New member function: DefineOprt For adding user defined binary operators.
    * New member function: EnableBuiltInOprt(bool) Enables/Disables built in binary operators.
    * New member function: AddValIdent(...) to add callbacks for custom value recognition functions.
    * Removed: SetVar(), SetConst().
    * Renamed: Most interface functions have been renamed
    * Changed:  The type for multiargument callbacks multfun_type has changed. It no longer takes a std::vector as input.

  Internal changes
    * new class muParserTokenReader.h encapsulates the token identification and token assignement.
    * Internal handling of function callbacks unified as a result the performance of the bytecode evaluation increased.


Rev 1.22: October, 2005
-----------------------

Release notes:

All features of Version 1.22 are similar to Version 1.21. Version 1.22 fixes a compilation issue with gcc 4.0. In
order to fix this issue I rewrote part of the library to remove some unnecessary templates. This should make the
code cleaner. The Borland Project files have been removed. If you want to use it with Borland either use the dll version or create your own project files. I can't do it since I don't have this compiler at hand.

Changes:

  Project Changes:
    * Borland project files removed
      (The code should still compile with BCB but I cant provide you with project files)

  Internal Changes:
    * unnecessary template files have been removed:
        - new files: muParserError.cpp, muParserTokenReader.cpp, muParserCallback.cpp
        - removed Files: muIParserTypes.h


Rev 1.23: 19. October, 2005
---------------------------

Changes:

  Bugfixes:
    * Variable factory examples in Example1.cpp and Example3.cpp contained a subtle bug.

  New features:
    * Added a MSVC6 project file and introduced muParserFixes.h in order to make it compile with MSVC6


Rev 1.24: 29. October, 2005
---------------------------

Changes:

  Compatibility improvements:
    * parser now works on 64 bit compilers
    * (bytecode base datatype can now be changed freely)


Rev 1.25: 5. February, 2006
---------------------------

  Build system: (special thanks to Francesco Montorsi for implementing it!)
    * created a bakefile-based build system which adds support for the following win32 compilers:
      -> MS visual C++ (6 and .NET)
      -> BorlandC++ (5 or greater)
      -> Mingw32 (tested with gcc 3.2)
      -> Watcom (not tested)
      and for GCC on Unix (using a standard autoconf's configure script).

  Compatibility improvements:
    * fixed some small warnings when using -Wall with GCC on Unix
    * added inclusion guards for win32-specific portions of code
    * added fixes that remove compiler warnings on Intel C++ and the Solaris C++ compiler.


Rev 1.26: (unofficial release)
---------------------------

  New Features:
   * Unary operator precedence can now be changed by the user.


Rev 1.27:
---------------------------

  Build system:
   * Modified build\ directory layout introducing some subfolders 
     for the various IDE supported
   * Project files for BCB and MSVC7 added
   * Switched to use bakefile 0.2.1 which now correctly creates the 
     "make uninstall" target for autoconf's Makefile.in
   * Now the library debug builds are named "muparserd" instead of "muparser"
     to allow multiple mixed release/debug builds to coexist; so e.g. on Windows
     when building with DEBUG=1, you'll get "muparserd.lib" instead of "muparser.lib"

  New Features:
   * Factory functions can now take a user defined pointer
   * String functions can now be used with up to two additional 
     double parameters
   * Support for UNICODE character types added
   * Infix operator priority can now be changed by the user

  Bugfixes:
   * An internal error was raised when evaluating an empty 
     expressions
   * The error message raised in case of name collisions between 
     implicitely defined variables and postfix operators did contain
     misleading data.


Rev 1.28: 02. July, 2007
---------------------------
 
  Library changes:
  * Interface for the dynamic library changed and extended to create an interface 
    using pure C functions only. 
  * mupInit() removed

  Build system:
   * MSVC7 Project files removed in favor of MSVC8

  Bugfixes:
   * The dynamic library did not build on other systems than linux due to a misplaced 
     preprocessor definition. This is fixed now.

Rev 1.29: Januar 2008
---------------------

  Unrelease Version available only via SVN.


Rev 1.30: 09.06.2008
--------------------

  Changes:
   * Epsilon of the numerical differentiation algorithm changed to allow greater accuracy.

  New features:
   * Setting thousands separator and decimal separator is now possible

  Bugfixes:
   * The dll interface did not provide a callback for functions without any arguments.	 
	
Rev 1.31cp: 15.01.2010  (Maintainance release for CodeProject)
----------------------

  Changes:
   * Archive structure changed
   * C# wrapper added
   * Fixed issued that prevented compiling with VS2010 Beta2
    
Rev 1.32: 29.01.2010 
--------------------

  Changes:
   * "example3" renamed to "example2"
   * Project/Makefiles files are now provided for:
           - msvc2003 
           - msvc2005 
           - msvc2008
           - watcom   (makefile)
           - mingw    (makefile)
           - bcc      (makefile)
   * Project files for borland cpp builder were removed

  New features:
   * Added function returning muparsers version number
   * Added function for resetting the locale

  Bugfixes:	
   * Changes example1 in order to fix issues with irritating memory leak reports. 
     Added conditional code for memory leak detection with MSVC in example1.
     (see: http://www.codeproject.com/KB/recipes/FastMathParser.aspx?msg=3286367#xx3286367xx)
   * Fixed some warnings for gcc
