| 1 | module ferp_kinds |
| 2 | !> Portable kind parameters for FERP |
| 3 | !> Ensures consistent behavior across platforms (Apple Silicon, Linux x86_64) |
| 4 | use, intrinsic :: iso_fortran_env, only: int32, int64, real64 |
| 5 | implicit none |
| 6 | private |
| 7 | |
| 8 | public :: i32, i64, dp |
| 9 | public :: initial_line_len, max_line_len, max_path_len, max_pattern_len |
| 10 | public :: pattern_len |
| 11 | |
| 12 | !> Integer kinds |
| 13 | integer, parameter :: i32 = int32 |
| 14 | integer, parameter :: i64 = int64 |
| 15 | |
| 16 | !> Real kinds (for future use) |
| 17 | integer, parameter :: dp = real64 |
| 18 | |
| 19 | !> Buffer size constants |
| 20 | integer, parameter :: initial_line_len = 8192 ! Initial buffer size for dynamic line reading |
| 21 | integer, parameter :: max_line_len = 8192 ! Legacy - kept for compatibility, will be removed |
| 22 | integer, parameter :: max_path_len = 4096 |
| 23 | integer, parameter :: max_pattern_len = 4096 |
| 24 | |
| 25 | contains |
| 26 | |
| 27 | pure function pattern_len(pattern) result(plen) |
| 28 | !> Get the true length of a pattern, respecting null terminator if present |
| 29 | !> This allows whitespace-only patterns like " " to be handled correctly |
| 30 | !> If no null terminator is found, returns the full string length (not len_trim) |
| 31 | !> to properly handle whitespace-only patterns passed with explicit length |
| 32 | character(len=*), intent(in) :: pattern |
| 33 | integer :: plen |
| 34 | |
| 35 | integer :: i, slen |
| 36 | |
| 37 | slen = len(pattern) |
| 38 | plen = slen |
| 39 | |
| 40 | ! Look for null terminator |
| 41 | do i = 1, slen |
| 42 | if (pattern(i:i) == char(0)) then |
| 43 | plen = i - 1 |
| 44 | return |
| 45 | end if |
| 46 | end do |
| 47 | |
| 48 | ! No null terminator found - return full length |
| 49 | ! (pattern was passed with explicit length, e.g., pattern(1:2)) |
| 50 | ! Note: Don't use len_trim here as it would break whitespace patterns |
| 51 | |
| 52 | end function pattern_len |
| 53 | |
| 54 | end module ferp_kinds |
| 55 |