- Missing
KIND=
onsize()
procedure. Gave incorrect response for large containers. Only affects V1 containers.
- Fix issues with GNU Make builds
- Prevented some macro redefinitions in
v1/map.inc
that caused warning messages and broke documentation tool on downstream projects.
-
Interfaces (intents) to map::at() and ordered_map::at(). The self object should be
INTENT(IN)
for these interfaces. -
Updated GitHub Actions
- OSs
- Remove macos-10.15
- Add ubuntu-22.04 and macos-12
- Compilers
- Removed gfortran-8
- Added gfortran-11
- Added gfortran-12 (for ubuntu-22.04)
- OSs
-
Fixed bug in
vector::insert_range()
(needs a unit test) -
Added
TARGET
to some dummy arguments to prevent NAG from doing copy-in / copy-out. Seems to have been causing a memory corruption issue with the yaFyaml package, but might indicate a bug in yaFyaml (or gFTL). -
Fixed non-standard-conforming mismatched integer KIND in deque implementation.
-
Fixed misspelling of SUCCESS
-
Various unused local variables that were causing annoying compiler warnings.
-
Reactivated unit tests (involving Foo) that were deactivated as a workaround for some NAG 7.1 compiler releases.
-
Patched (again) such that the assignment operator for Set invokes a deep copy. Previously I mistakenly thought that since the data structure now uses ALLOCATABLE components that Fortran intrinsic assignment would suffice. But forgot that the "parent" component is still a pointer. Failures from this assumption were subtle as often parents would point to correctly looking copies outside the intended data structure.
-
Missing RECURSIVE declarations on some procedures. The issue arises for YAML data structures where a map may contain items of the same map type and similarly for vectors.
- A verify() method was added to several containers to aid in debugging some of the problems mentioned above. Users of gFTL should not use this method - its interface may change and the procedure may even disappear in later releases.
- Corrected previous commit that eliminated the non intrinsic
assignment for set, map, and
ordered_map
containers. Just had not thought through why these are needed: internal pointers are not correctly established by intrinsic assignment. I was too focused on the nice property that allocatable components ar correctly deallocated. Use cases would sometimes work, because the compiler was avoiding copies when using constructors. p
-
Eliminated type-bound overload of
assignment(=)
for set, map, and ordered_map. It was found that it caused problems with ifort 2021.5.0 and not needed by other compilers after other recent changes. -
Also made deep-copy RECURSIVE, as this is needed in the yaFyaml use case. RECURSIVE is of course now default in Fortran, but not all compilers have implemented this consistently at this time.
- Missing RECURSIVE on methods in vector template. This is necessary for some use cases involving recursive data structures. In particular sequences-of-sequences in yaFyaml. GFortran has not yet implemented default RECURSIVE, which is what actually makes this necessary. (So not technically a bug, but ...)
- NVHPC compiler support
- Removed
PGI.mk
andNAG.mk
files which seem to be unneeded cruft
- On Windows M4 program is now downloaded from SourceForge during CMake configuration if it is not found.
- Some procedures for
map
andordered_map
had not been implemented and are now added in. This was an oversight and thus being treated as a bug rather than a feature.
-
Minor bug in Pair template that is exposed under certain combinations of key/value types. If key has "==" but "value" does not, then some local variable declarations are skipped that are needed.
-
Declarion of Ptr argument in Pointer template. Still not ready for production use though.
- Fixed typo in
#undef
that was creating noisy compiler warnings. (@ZedThree)
-
Bug in set::erase() where certan scenarios resulted in an incorrect (and inconsistent) state.
-
Missing quotes in Intel.cmake for Windows builds. Recent CMake versions detect this even in Linux builds.
- RECURSIVE needed in some procedures for advanced use cases.
This will be the final (non bugfix) release of version 1.
Future version 2 releases will break backwards compatibility by making the v2 containers default, but v1 containers will still be accessible with minimal changes.
Documentation for v2 containers should be completed soon, but as always, the comparable C++ STL documentation is generally quite close modulo Fortran syntax.
- Added support for compiling on Windows with Intel compiler.
- Corrected uninitialized value problem with v2 maps. Detected by NAG with aggressive debug flags.
- Corrected logic for default value for vectors of (polymorphic) abstract objects.
- Corrected logic for standard GFortran workarounds for fHamcrest tests.
- Simplified various expressions involving type operations. Intel 2021.1 was choking
on an external use case but seems happier if intemediate variables are introduced
within expressions involving user defined
==
and<
. Some attempt was made to useASSOCIATE
instead, but NAG 7.0 had trouble with one of those. A reproducer for the Intel problem has been created and will be submitted. - Set container now uses ALLOCATABLE for children rather than pointers. This makes some internal algorithms a bit painful to implement, but avoids the need for explicit FINAL methods which appear to expose buggy compilers. (Hard to isolate though.)
- Deleted altSet support in v2 containers. This was always intendend as a workaround for limitations in FINAL implementation by various compilers. But v2 set now uses allocatable containers and sidesteps this. (Also, altset was never completed in v2 containers anyway.)
- Last minute fixes for gfortran missed a duplicate type declaration caught by NAG.
- enabled double precision complex in v2 interfaces.
- Entirely revamped interfaces as prelude to v2.0. Generally much closer to C++ STL than previous releases. v1 interfaces are still the default and will be maintained after v2.0.
- Includes new containers: . ptr . deque . stack . queue . ordered-map
- Beginnings of real documentation - see
./include/v2/vector/vector.md
and./include/v2/map/map.md
- Some conflicts among GFE build chains related to previous version.
-
gFTL now uses CMake namespaces. Upstream projects should now link with 'GFTL::gftl
instead of
gftl`. Technically a backward incompatibility, but does not seem serious enough to warrant a major release. -
Export CMake targets to make it easier to consume. (Contrib)
###Changed
- Undoing previous commit. Caused insidious downstream issues with 18.0.5. Better to just kludge the failing test and move on.
-
Blocked installation of Foo.inc include files that are only used for testing.
-
Reintroduced workarounds for older ifort and gfortran compilers. Annoyingly the workaround for one breaks the other.
=======
- +/- operators on vector reverse iterators were incorrectly implemented in v1.
-
Changed location of GFTLConfig.cmake
Now installed in a more conventional location:
./lib/cmake/GFTL/GFTLConfig.cmake
Previous location was really a windows convention (first attempt). Also now using .configure_package_config_file() .
write_basic_package_version_file()``` -
Moved ./cmake_utils to ./cmake
-
Relocated config related files to ./cmake
-
Added namespace
gFTL::
for externa project use -
Cleaned up CMake logic in include dirs.
-
Only search for testing if Fortran compiler is detected. gFTL does not require a Fortran compiler for installation, but Fortran is required to build the tests. Previously, gFTL artificially included Fortran in the project LANGUAGES option to sidestep the issue.
-
Moved legacy include to include-v1
-
Changed capitalization of installation from GFTL to gFTL. Users should now use
find_package(gFTL)
-
Vector template . relational operators are module procedures rather than class methods . arithmetic operators are module procedures rathen than class methods . introduced a few iterator module procedures: advance, begin, distance, end, next, previous
-
Support for type names.
This is to allow useful diagnostics via DTIO.
- eliminated stray in source code; was generating annoying warnings in some compilers
- fixes for CMakeList
- removed incorrect parens in conditionl
- added Fortran to PROJECT - necessary for recent change in pFUnit.
- Workaround for PGI compiler - does not like "set" as a derived type name.
- bugfix for workaround in v1.2.1; some use cases were not deallocating structure components prior to reallocation.
- added workaround for memory leak detected with Intel 18 compiler
- updated to use pFUnit 4.0 for tests
- started maintaining a change log