This release of the Dinamica EGO software introduces some improvements and addresses bugs (compared to stable version 8.7.0):
Core Enhancements
System, Memory, and File Management:
Updated version to 8.8.0.
Added functionality to force `mimalloc` to deallocate unused memory.
Changed pure allocations to use smart pointers.
Implemented fallback to system default temporary directory when the user-defined directory is unavailable.
Refactored code by moving the functionality for determining the effective storage mode when opening an image into `MapUtils::determineStorageMode()`.
Fixed regression caused by validating a file for writing: the software will not create a new file if a file does not exist during validation.
Data Structures (Tables, Tuples, and Variants):
Used a standard comparison method for `Tuple`/`TupleView` and `Variant`, fixing the incorrect ordering of Tuples with different sizes.
Reduced variant memory footprint.
Methods were added to recover all table indices at once but behind a lock.
Sequence generation for lookup table constants was refined: the new default behavior allows a single sequence only if it represents more than 20,000,000 entries per table; otherwise, the table is written in expanded (non-sequence) form.
Fixed a problem where different ordering of keys/values on a Table could result in writing a table with a header without the `str` type.
Fixed bug that was causing an infinite loop when converting a table into weights.
Scripting and Concurrency:
Added a flag to `ScriptReader` to ignore undefined variables, which prevents errors on missing variables and allows partial script fragments to be parsed; this flag was also exported to Java.
Added parameters to `calculateProgress()` to specify the lower and upper progress limits that should be reported. An additional entity was defined to report progress during execution.
Fixed potential race condition that might occur if a worker is selecting a task while the GUI is querying the worker's task information.
The copy of `TaskMutex` and `TaskLock` was removed to prevent Undefined Behavior (UB), and memory ordering on `TaskLock` was fixed.
Image and Spatial Data Handling:
Cropping functionality was implemented using the `CropMapToExtents` functor.
Optional cropping extents were added to `LoadMap` and `LoadCategoricalMap`, allowing only a specified portion of a map to be loaded.
Fixed implementation of `Bounds` to correctly deal with constructing its limits using consecutive calls to `combine()`.
`Bounds` now keeps its type, allowing it to represent a point or a region.
Improvements to `BaseRasterImageWindow`: allow a categorization to be assigned that might be different from the peer image, and ensure this modified categorization is passed along when copied.
Fixed bug related to retrieving the bottom-right coordinate of a region by `GetRegionInfo` and `GetAllRegionsInfo`.
Graphical Interface Enhancements
Performance and Responsiveness:
Improved responsiveness of tables and lookup tables by showing a loading icon and executing the load operation in the background.
Speed up lookup table visualization by using a cache of the table keys.
Fixed a bug where the resolution of the lookup table chart is completely off when using a hi dpi display.
Script Editor and Memory:
The GUI was updated to allow pasting incomplete script fragments from the system clipboard by utilizing the core's ignore-undefined-variables flag.
Script modified properties are written explicitly on save instead of on every write operation.
Functionality was added to force freeing reserved memory after script runs or when a script editor is closed.
Utility Updates:
Updated CRAN mirror list, refreshing URLs/names and removing outdated entries.
Fixed bug that caused an error when trying to copy the log text to the clipboard without selecting text first.