Elzed 2.4.0 introduces 64-bit processor support on all platforms, while continuing to support 32-bit processors.
Elzed handles, which were 32-bit values in previous releases, are now 64-bit values in both the 32-bit and 64-bit versions of Elzed on all platforms.
The use of handles to Elzed objects has been expanded. More than 30 new API calls support the use of handles to Elzed variables and contexts, complementing the "by name" access methods already supported, and resulting in improved object access performance. The list of new API calls appears below.
Context creation has also changed slightly in light of expanded handle support. In previous versions, context creation calls returned a boolean to indicate success or failure. In this version, successful context creation calls return a handle to the new context; calls that fail return NULL.
Support for Elzed arrays has been completely rewritten, resulting in a smaller memory footprint and improved performance. In addition, boolean arrays are now supported.
Because of a change in the GCC 4.2 compiler, most string (char*) parameters of Elzed API calls are now declared const. A list of the affected calls appears at the end of these notes.
Complex variables are now supported as a distinct data type, rather than merely a variant of the numeric type. Promotion of numeric variables to complex is now more strictly controlled.
Array and variable creation and assignment calls have changed significantly:
In previous versions of Elzed, boolean, complex, and numeric variables were created using the lzSetBoolVar, lzSetComplexVar, and lzSetNumVar calls respectively. These same calls were used to set the values of existing variables of these types. String variables, however, were created with calls to lzCreateStrVar and were set with calls to lzSetStrVar.
In version 2.4.0 these calls are more consistent. Beginning in this version, variables of all types are created with "create" calls (lzCreateNumVar for numbers, lzCreateBoolVar for booleans, etc.) and assigned values with "set" calls (lzSetNumVar for numbers, lzSetBoolVar for booleans, etc.) Calling a "set" API on a variable that does not exist will no longer result in the variable being created; such a call will now return an error. Support for string variables is unchanged, with separate calls for creation and assignment.
In previous versions of Elzed, API calls that created variables or arrays returned a boolean to indicate success or failure. Starting in Elzed 2.4.0, these "create" calls return a handle to the new variable if successful. Calls that are unsuccessful return NULL.
Every API call that sets a variable or array value by name now has a corresponding call that accepts a handle. For example, lzSetNumVar accepts a scope, a variable name, and a value. The corresponding call, lzSetNumVarByHandle, accepts a variable handle and a value.
Boolean arrays are now directly supported by Elzed.
Default variable scope is now an attribute of the current context. Variables that are defined implicitly or declared without a scope specifier will be created at the default scope. A new API call will set the default variable scope. Details below.
The precision of formatted numeric results is now an attribute of the current context. A new API call will set this value. Details below.