From af2d545885d6e1c021e65400299073e066ffe589 Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Fri, 1 May 2020 12:08:31 -0400 Subject: [PATCH 1/5] add releasing resource function --- src/AbstractHandler.F90 | 6 ++++++ src/AbstractLogger.F90 | 9 +++++++++ src/FileHandler.F90 | 11 +++++++++++ src/Logger.F90 | 19 +++++++++++++++++++ src/LoggerManager.F90 | 19 +++++++++++++++++++ src/MpiLock.F90 | 3 ++- src/StreamHandler.F90 | 6 ++++++ tests/MockHandler.F90 | 4 ++++ 8 files changed, 76 insertions(+), 1 deletion(-) diff --git a/src/AbstractHandler.F90 b/src/AbstractHandler.F90 index 140fbc1..f17c78a 100644 --- a/src/AbstractHandler.F90 +++ b/src/AbstractHandler.F90 @@ -44,6 +44,7 @@ module PFL_AbstractHandler procedure :: handle procedure(close), deferred :: close procedure(flush), deferred :: flush + procedure(clean_lock), deferred :: clean_lock procedure :: set_formatter procedure :: format procedure :: set_level @@ -80,6 +81,11 @@ subroutine flush(this) class(AbstractHandler), intent(in) :: this end subroutine flush + subroutine clean_lock(this) + import AbstractHandler + class(AbstractHandler), intent(inout) :: this + end subroutine clean_lock + logical function equal(a, b) import AbstractHandler class (AbstractHandler), intent(in) :: a diff --git a/src/AbstractLogger.F90 b/src/AbstractLogger.F90 index fcd1c81..95b4c60 100644 --- a/src/AbstractLogger.F90 +++ b/src/AbstractLogger.F90 @@ -17,6 +17,15 @@ module PFL_AbstractLogger public :: AbstractLogger type, abstract, extends(Filterer) :: AbstractLogger + contains + procedure :: clean_handlers end type AbstractLogger +contains + +! no op + subroutine clean_handlers(this) + class(AbstractLogger), intent(inout) :: this + end subroutine clean_handlers + end module PFL_AbstractLogger diff --git a/src/FileHandler.F90 b/src/FileHandler.F90 index a51c2c9..3cf6e34 100644 --- a/src/FileHandler.F90 +++ b/src/FileHandler.F90 @@ -37,6 +37,7 @@ module PFL_FileHandler procedure :: equal procedure :: set_lock procedure :: is_lockable + procedure :: clean_lock end type FileHandler interface FileHandler @@ -275,4 +276,14 @@ subroutine set_lock(this, lock) end subroutine set_lock + subroutine clean_lock(this) + class (FileHandler), intent(inout) :: this + + if (this%is_lockable()) then + call this%lock%destroy() + deallocate(this%lock) + end if + + end subroutine clean_lock + end module PFL_FileHandler diff --git a/src/Logger.F90 b/src/Logger.F90 index 7737a08..49e63c6 100644 --- a/src/Logger.F90 +++ b/src/Logger.F90 @@ -70,6 +70,7 @@ module PFL_Logger procedure :: get_parent procedure :: set_propagate procedure :: get_propagate + procedure :: clean_handlers end type Logger interface Logger @@ -171,6 +172,21 @@ subroutine add_handler(this, handler) end subroutine add_handler + subroutine clean_handlers(this) + class (Logger), intent(inout) :: this + class (AbstractHandler), pointer :: handler + + type (HandlerVectorIterator) :: iter + + iter = this%handlers%begin() + do while (iter /= this%handlers%end()) + handler => iter%get() + call handler%clean_lock() + call iter%next() + end do + + end subroutine clean_handlers + !--------------------------------------------------------------------------- !*ROUTINE: remove_handler @@ -181,10 +197,13 @@ subroutine remove_handler(this, handler) class (Logger), intent(inout) :: this class (AbstractHandler), intent(in) :: handler + class (AbstractHandler), pointer :: hdlerPtr integer :: i i = this%handlers%get_index(handler) if (i > 0) then + hdlerPtr=>this%handlers%at(i) + call hdlerPtr%clean_lock() call this%handlers%erase(this%handlers%begin() + i - 1) else ! Only can get here if handler not found diff --git a/src/LoggerManager.F90 b/src/LoggerManager.F90 index 0d8e884..a47364b 100644 --- a/src/LoggerManager.F90 +++ b/src/LoggerManager.F90 @@ -54,6 +54,7 @@ module PFL_LoggerManager procedure :: build_root_logger procedure :: basic_config + procedure :: clean_loggers end type LoggerManager @@ -487,4 +488,22 @@ subroutine basic_config(this, unusable, filename, level, stream, force, handlers end subroutine basic_config + subroutine clean_loggers(this) + class(LoggerManager), intent(inout) :: this + character(len=:), allocatable :: name + type(LoggerIterator) :: iter + class(AbstractLogger), pointer :: loggerPtr + + iter = this%loggers%begin() + do while (iter /= this%loggers%end()) + name = iter%key() + loggerPtr=> this%loggers%at(name) + call loggerPtr%clean_handlers() + call iter%next() + enddo + + call this%root_node%clean_handlers() + + end subroutine clean_loggers + end module PFL_LoggerManager diff --git a/src/MpiLock.F90 b/src/MpiLock.F90 index a1116cb..95709b5 100644 --- a/src/MpiLock.F90 +++ b/src/MpiLock.F90 @@ -182,7 +182,8 @@ subroutine destroy(this) call MPI_Free_mem(scratchpad, ierror) end if - call MPI_Comm_free(this%comm, ierror) + !W.J comment out. Does this comm belong to this lock? Maybe not + !call MPI_Comm_free(this%comm, ierror) end subroutine destroy diff --git a/src/StreamHandler.F90 b/src/StreamHandler.F90 index 7e014ba..dfa82f1 100644 --- a/src/StreamHandler.F90 +++ b/src/StreamHandler.F90 @@ -36,6 +36,7 @@ module PFL_StreamHandler procedure :: set_unit procedure :: emit_message procedure :: close ! noop + procedure :: clean_lock ! noop procedure :: flush => flush_unit procedure :: equal end type StreamHandler @@ -143,6 +144,11 @@ subroutine close(this) class (StreamHandler), intent(inout) :: this end subroutine close + ! A no-op routine. + !--------------------------------------------------------------------------- + subroutine clean_lock(this) + class (StreamHandler), intent(inout) :: this + end subroutine clean_lock !--------------------------------------------------------------------------- ! FUNCTION: diff --git a/tests/MockHandler.F90 b/tests/MockHandler.F90 index 3f2e0da..7a5df5b 100644 --- a/tests/MockHandler.F90 +++ b/tests/MockHandler.F90 @@ -23,6 +23,7 @@ module MockHandler_mod contains procedure :: emit_message procedure :: close ! noop + procedure :: clean_lock ! noop procedure :: flush => flushUnit procedure :: equal end type MockHandler @@ -72,6 +73,9 @@ subroutine close(this) class (MockHandler), intent(inout) :: this end subroutine close + subroutine clean_lock(this) + class(MockHandler), intent(inout) :: this + end subroutine clean_lock logical function equal(a, b) class (MockHandler), intent(in) :: a From b6aad0c68c0ff1cea8bb4379d9e081e0431c7914 Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Fri, 1 May 2020 13:41:35 -0400 Subject: [PATCH 2/5] rename clean_ to free_ --- src/AbstractHandler.F90 | 6 +++--- src/AbstractLogger.F90 | 6 +++--- src/FileHandler.F90 | 6 +++--- src/Logger.F90 | 10 +++++----- src/LoggerManager.F90 | 10 +++++----- src/StreamHandler.F90 | 6 +++--- tests/MockHandler.F90 | 6 +++--- 7 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/AbstractHandler.F90 b/src/AbstractHandler.F90 index f17c78a..ff26e3c 100644 --- a/src/AbstractHandler.F90 +++ b/src/AbstractHandler.F90 @@ -44,7 +44,7 @@ module PFL_AbstractHandler procedure :: handle procedure(close), deferred :: close procedure(flush), deferred :: flush - procedure(clean_lock), deferred :: clean_lock + procedure(free_lock), deferred :: free_lock procedure :: set_formatter procedure :: format procedure :: set_level @@ -81,10 +81,10 @@ subroutine flush(this) class(AbstractHandler), intent(in) :: this end subroutine flush - subroutine clean_lock(this) + subroutine free_lock(this) import AbstractHandler class(AbstractHandler), intent(inout) :: this - end subroutine clean_lock + end subroutine free_lock logical function equal(a, b) import AbstractHandler diff --git a/src/AbstractLogger.F90 b/src/AbstractLogger.F90 index 95b4c60..1526a4f 100644 --- a/src/AbstractLogger.F90 +++ b/src/AbstractLogger.F90 @@ -18,14 +18,14 @@ module PFL_AbstractLogger type, abstract, extends(Filterer) :: AbstractLogger contains - procedure :: clean_handlers + procedure :: free_handlers end type AbstractLogger contains ! no op - subroutine clean_handlers(this) + subroutine free_handlers(this) class(AbstractLogger), intent(inout) :: this - end subroutine clean_handlers + end subroutine free_handlers end module PFL_AbstractLogger diff --git a/src/FileHandler.F90 b/src/FileHandler.F90 index 3cf6e34..b81622b 100644 --- a/src/FileHandler.F90 +++ b/src/FileHandler.F90 @@ -37,7 +37,7 @@ module PFL_FileHandler procedure :: equal procedure :: set_lock procedure :: is_lockable - procedure :: clean_lock + procedure :: free_lock end type FileHandler interface FileHandler @@ -276,7 +276,7 @@ subroutine set_lock(this, lock) end subroutine set_lock - subroutine clean_lock(this) + subroutine free_lock(this) class (FileHandler), intent(inout) :: this if (this%is_lockable()) then @@ -284,6 +284,6 @@ subroutine clean_lock(this) deallocate(this%lock) end if - end subroutine clean_lock + end subroutine free_lock end module PFL_FileHandler diff --git a/src/Logger.F90 b/src/Logger.F90 index 49e63c6..8c86cc3 100644 --- a/src/Logger.F90 +++ b/src/Logger.F90 @@ -70,7 +70,7 @@ module PFL_Logger procedure :: get_parent procedure :: set_propagate procedure :: get_propagate - procedure :: clean_handlers + procedure :: free_handlers end type Logger interface Logger @@ -172,7 +172,7 @@ subroutine add_handler(this, handler) end subroutine add_handler - subroutine clean_handlers(this) + subroutine free_handlers(this) class (Logger), intent(inout) :: this class (AbstractHandler), pointer :: handler @@ -181,11 +181,11 @@ subroutine clean_handlers(this) iter = this%handlers%begin() do while (iter /= this%handlers%end()) handler => iter%get() - call handler%clean_lock() + call handler%free_lock() call iter%next() end do - end subroutine clean_handlers + end subroutine free_handlers !--------------------------------------------------------------------------- @@ -203,7 +203,7 @@ subroutine remove_handler(this, handler) i = this%handlers%get_index(handler) if (i > 0) then hdlerPtr=>this%handlers%at(i) - call hdlerPtr%clean_lock() + call hdlerPtr%free_lock() call this%handlers%erase(this%handlers%begin() + i - 1) else ! Only can get here if handler not found diff --git a/src/LoggerManager.F90 b/src/LoggerManager.F90 index a47364b..1ee9a7d 100644 --- a/src/LoggerManager.F90 +++ b/src/LoggerManager.F90 @@ -54,7 +54,7 @@ module PFL_LoggerManager procedure :: build_root_logger procedure :: basic_config - procedure :: clean_loggers + procedure :: free_loggers end type LoggerManager @@ -488,7 +488,7 @@ subroutine basic_config(this, unusable, filename, level, stream, force, handlers end subroutine basic_config - subroutine clean_loggers(this) + subroutine free_loggers(this) class(LoggerManager), intent(inout) :: this character(len=:), allocatable :: name type(LoggerIterator) :: iter @@ -498,12 +498,12 @@ subroutine clean_loggers(this) do while (iter /= this%loggers%end()) name = iter%key() loggerPtr=> this%loggers%at(name) - call loggerPtr%clean_handlers() + call loggerPtr%free_handlers() call iter%next() enddo - call this%root_node%clean_handlers() + call this%root_node%free_handlers() - end subroutine clean_loggers + end subroutine free_loggers end module PFL_LoggerManager diff --git a/src/StreamHandler.F90 b/src/StreamHandler.F90 index dfa82f1..37d87d1 100644 --- a/src/StreamHandler.F90 +++ b/src/StreamHandler.F90 @@ -36,7 +36,7 @@ module PFL_StreamHandler procedure :: set_unit procedure :: emit_message procedure :: close ! noop - procedure :: clean_lock ! noop + procedure :: free_lock ! noop procedure :: flush => flush_unit procedure :: equal end type StreamHandler @@ -146,9 +146,9 @@ end subroutine close ! A no-op routine. !--------------------------------------------------------------------------- - subroutine clean_lock(this) + subroutine free_lock(this) class (StreamHandler), intent(inout) :: this - end subroutine clean_lock + end subroutine free_lock !--------------------------------------------------------------------------- ! FUNCTION: diff --git a/tests/MockHandler.F90 b/tests/MockHandler.F90 index 7a5df5b..2ba8c65 100644 --- a/tests/MockHandler.F90 +++ b/tests/MockHandler.F90 @@ -23,7 +23,7 @@ module MockHandler_mod contains procedure :: emit_message procedure :: close ! noop - procedure :: clean_lock ! noop + procedure :: free_lock ! noop procedure :: flush => flushUnit procedure :: equal end type MockHandler @@ -73,9 +73,9 @@ subroutine close(this) class (MockHandler), intent(inout) :: this end subroutine close - subroutine clean_lock(this) + subroutine free_lock(this) class(MockHandler), intent(inout) :: this - end subroutine clean_lock + end subroutine free_lock logical function equal(a, b) class (MockHandler), intent(in) :: a From 7eb964ca81e447df6e7be37ea8993f0bd3da0738 Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Fri, 1 May 2020 13:51:47 -0400 Subject: [PATCH 3/5] remove free_* suffix --- src/AbstractHandler.F90 | 6 +++--- src/AbstractLogger.F90 | 6 +++--- src/FileHandler.F90 | 6 +++--- src/Logger.F90 | 10 +++++----- src/LoggerManager.F90 | 10 +++++----- src/StreamHandler.F90 | 6 +++--- tests/MockHandler.F90 | 6 +++--- 7 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/AbstractHandler.F90 b/src/AbstractHandler.F90 index ff26e3c..386caf6 100644 --- a/src/AbstractHandler.F90 +++ b/src/AbstractHandler.F90 @@ -44,7 +44,7 @@ module PFL_AbstractHandler procedure :: handle procedure(close), deferred :: close procedure(flush), deferred :: flush - procedure(free_lock), deferred :: free_lock + procedure(free), deferred :: free procedure :: set_formatter procedure :: format procedure :: set_level @@ -81,10 +81,10 @@ subroutine flush(this) class(AbstractHandler), intent(in) :: this end subroutine flush - subroutine free_lock(this) + subroutine free(this) import AbstractHandler class(AbstractHandler), intent(inout) :: this - end subroutine free_lock + end subroutine free logical function equal(a, b) import AbstractHandler diff --git a/src/AbstractLogger.F90 b/src/AbstractLogger.F90 index 1526a4f..6e4a289 100644 --- a/src/AbstractLogger.F90 +++ b/src/AbstractLogger.F90 @@ -18,14 +18,14 @@ module PFL_AbstractLogger type, abstract, extends(Filterer) :: AbstractLogger contains - procedure :: free_handlers + procedure :: free end type AbstractLogger contains ! no op - subroutine free_handlers(this) + subroutine free(this) class(AbstractLogger), intent(inout) :: this - end subroutine free_handlers + end subroutine free end module PFL_AbstractLogger diff --git a/src/FileHandler.F90 b/src/FileHandler.F90 index b81622b..5291fbf 100644 --- a/src/FileHandler.F90 +++ b/src/FileHandler.F90 @@ -37,7 +37,7 @@ module PFL_FileHandler procedure :: equal procedure :: set_lock procedure :: is_lockable - procedure :: free_lock + procedure :: free end type FileHandler interface FileHandler @@ -276,7 +276,7 @@ subroutine set_lock(this, lock) end subroutine set_lock - subroutine free_lock(this) + subroutine free(this) class (FileHandler), intent(inout) :: this if (this%is_lockable()) then @@ -284,6 +284,6 @@ subroutine free_lock(this) deallocate(this%lock) end if - end subroutine free_lock + end subroutine free end module PFL_FileHandler diff --git a/src/Logger.F90 b/src/Logger.F90 index 8c86cc3..13b3d18 100644 --- a/src/Logger.F90 +++ b/src/Logger.F90 @@ -70,7 +70,7 @@ module PFL_Logger procedure :: get_parent procedure :: set_propagate procedure :: get_propagate - procedure :: free_handlers + procedure :: free end type Logger interface Logger @@ -172,7 +172,7 @@ subroutine add_handler(this, handler) end subroutine add_handler - subroutine free_handlers(this) + subroutine free(this) class (Logger), intent(inout) :: this class (AbstractHandler), pointer :: handler @@ -181,11 +181,11 @@ subroutine free_handlers(this) iter = this%handlers%begin() do while (iter /= this%handlers%end()) handler => iter%get() - call handler%free_lock() + call handler%free() call iter%next() end do - end subroutine free_handlers + end subroutine free !--------------------------------------------------------------------------- @@ -203,7 +203,7 @@ subroutine remove_handler(this, handler) i = this%handlers%get_index(handler) if (i > 0) then hdlerPtr=>this%handlers%at(i) - call hdlerPtr%free_lock() + call hdlerPtr%free() call this%handlers%erase(this%handlers%begin() + i - 1) else ! Only can get here if handler not found diff --git a/src/LoggerManager.F90 b/src/LoggerManager.F90 index 1ee9a7d..1dd32a7 100644 --- a/src/LoggerManager.F90 +++ b/src/LoggerManager.F90 @@ -54,7 +54,7 @@ module PFL_LoggerManager procedure :: build_root_logger procedure :: basic_config - procedure :: free_loggers + procedure :: free end type LoggerManager @@ -488,7 +488,7 @@ subroutine basic_config(this, unusable, filename, level, stream, force, handlers end subroutine basic_config - subroutine free_loggers(this) + subroutine free(this) class(LoggerManager), intent(inout) :: this character(len=:), allocatable :: name type(LoggerIterator) :: iter @@ -498,12 +498,12 @@ subroutine free_loggers(this) do while (iter /= this%loggers%end()) name = iter%key() loggerPtr=> this%loggers%at(name) - call loggerPtr%free_handlers() + call loggerPtr%free() call iter%next() enddo - call this%root_node%free_handlers() + call this%root_node%free() - end subroutine free_loggers + end subroutine free end module PFL_LoggerManager diff --git a/src/StreamHandler.F90 b/src/StreamHandler.F90 index 37d87d1..a79f895 100644 --- a/src/StreamHandler.F90 +++ b/src/StreamHandler.F90 @@ -36,7 +36,7 @@ module PFL_StreamHandler procedure :: set_unit procedure :: emit_message procedure :: close ! noop - procedure :: free_lock ! noop + procedure :: free ! noop procedure :: flush => flush_unit procedure :: equal end type StreamHandler @@ -146,9 +146,9 @@ end subroutine close ! A no-op routine. !--------------------------------------------------------------------------- - subroutine free_lock(this) + subroutine free(this) class (StreamHandler), intent(inout) :: this - end subroutine free_lock + end subroutine free !--------------------------------------------------------------------------- ! FUNCTION: diff --git a/tests/MockHandler.F90 b/tests/MockHandler.F90 index 2ba8c65..08fed63 100644 --- a/tests/MockHandler.F90 +++ b/tests/MockHandler.F90 @@ -23,7 +23,7 @@ module MockHandler_mod contains procedure :: emit_message procedure :: close ! noop - procedure :: free_lock ! noop + procedure :: free ! noop procedure :: flush => flushUnit procedure :: equal end type MockHandler @@ -73,9 +73,9 @@ subroutine close(this) class (MockHandler), intent(inout) :: this end subroutine close - subroutine free_lock(this) + subroutine free(this) class(MockHandler), intent(inout) :: this - end subroutine free_lock + end subroutine free logical function equal(a, b) class (MockHandler), intent(in) :: a From f55680ee69f7907651d9b3c58476540c3542c25a Mon Sep 17 00:00:00 2001 From: Tom Clune Date: Fri, 1 May 2020 14:27:36 -0400 Subject: [PATCH 4/5] Added free() mechanism for MPI resources. --- CMakeLists.txt | 2 +- ChangeLog.md | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7037c72..aeaf9f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,7 @@ # ------------------------------------------------------------------------ # cmake_minimum_required (VERSION 3.8.0) project (PFLOGGER - VERSION 1.4.0 + VERSION 1.4.1 LANGUAGES Fortran) set (CMAKE_MODULE_PATH diff --git a/ChangeLog.md b/ChangeLog.md index 6de515f..ca9da7d 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.4.1] - 2020-05-01 + +### Added +- Added free() methods to various classes to ensure that MPI resources + are deleted at the end of the run. Without this, some MPI flavors + will report an error on MPI_Finalize(). To use: + + call logging%free + ## [1.4.0] - 2020-04-17 ### Added From 5f74444c8a57b356dc23b4a2b1a2f54a7d92e68d Mon Sep 17 00:00:00 2001 From: Tom Clune Date: Wed, 20 May 2020 14:18:09 -0400 Subject: [PATCH 5/5] Modified name of Pair type in gFTL maps. - Modified name of Pair type in gFTL maps. These are not used within pFlogger outside of their host modules, but it is more consistent with the latest gFTL-shared and may help anyone that tries to port with XLF. --- CMakeLists.txt | 2 +- ChangeLog.md | 9 +++++++++ src/MpiLock.F90 | 3 +++ src/StringAbstractLoggerPolyMap.F90 | 2 ++ src/StringFilterMap.F90 | 1 + src/StringFormatterMap.F90 | 1 + src/StringHandlerMap.F90 | 1 + src/StringLockMap.F90 | 1 + 8 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aeaf9f2..6ca8172 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,7 @@ # ------------------------------------------------------------------------ # cmake_minimum_required (VERSION 3.8.0) project (PFLOGGER - VERSION 1.4.1 + VERSION 1.4.2 LANGUAGES Fortran) set (CMAKE_MODULE_PATH diff --git a/ChangeLog.md b/ChangeLog.md index ca9da7d..772e4f8 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.4.2] - 2020-05-20 + +### Changed + +- Modified name of Pair type in gFTL maps. These are not used within + pFlogger outside of their host modules, but it is more consistent with + the latest gFTL-shared and may help anyone that tries to port with XLF. + + ## [1.4.1] - 2020-05-01 ### Added diff --git a/src/MpiLock.F90 b/src/MpiLock.F90 index 95709b5..96471df 100644 --- a/src/MpiLock.F90 +++ b/src/MpiLock.F90 @@ -1,3 +1,6 @@ +! Based upon +! http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.113.30&rep=rep1&type=pdf + module PFL_MpiLock use mpi use PFL_AbstractLock diff --git a/src/StringAbstractLoggerPolyMap.F90 b/src/StringAbstractLoggerPolyMap.F90 index 297d646..0c97553 100644 --- a/src/StringAbstractLoggerPolyMap.F90 +++ b/src/StringAbstractLoggerPolyMap.F90 @@ -14,12 +14,14 @@ module PFL_StringAbstractLoggerPolyMap #define _map LoggerMap #define _iterator LoggerIterator +#define _pair StringLoggerPair #include "types/key_deferredLengthString.inc" #define _value class(AbstractLogger) #define _value_allocatable #define _value_equal_defined + #define _alt #define _pair_allocatable #include "templates/map.inc" diff --git a/src/StringFilterMap.F90 b/src/StringFilterMap.F90 index 1e7718d..41b3d48 100644 --- a/src/StringFilterMap.F90 +++ b/src/StringFilterMap.F90 @@ -12,6 +12,7 @@ module PFL_StringFilterMap use PFL_AbstractFilter #define _map FilterMap +#define _pair FilterPair #define _iterator FilterIterator #include "types/key_deferredLengthString.inc" diff --git a/src/StringFormatterMap.F90 b/src/StringFormatterMap.F90 index 3778389..0ccb9ab 100644 --- a/src/StringFormatterMap.F90 +++ b/src/StringFormatterMap.F90 @@ -12,6 +12,7 @@ module PFL_StringFormatterMap use PFL_Formatter #define _map FormatterMap +#define _pair FormatterPair #define _iterator FormatterIterator #include "types/key_deferredLengthString.inc" diff --git a/src/StringHandlerMap.F90 b/src/StringHandlerMap.F90 index fe50e71..6edac42 100644 --- a/src/StringHandlerMap.F90 +++ b/src/StringHandlerMap.F90 @@ -12,6 +12,7 @@ module PFL_StringHandlerMap use PFL_AbstractHandler #define _map HandlerMap +#define _pair HandlerPair #define _iterator HandlerIterator #include "types/key_deferredLengthString.inc" diff --git a/src/StringLockMap.F90 b/src/StringLockMap.F90 index a420cd2..4279228 100644 --- a/src/StringLockMap.F90 +++ b/src/StringLockMap.F90 @@ -12,6 +12,7 @@ module PFL_StringLockMap use PFL_AbstractLock #define _map LockMap +#define _pair LockPair #define _iterator LockIterator #include "types/key_deferredLengthString.inc"