16 #include "../base/base_uses.f90"
27 INTEGER :: size = 0, buffer_id = 0
28 INTEGER :: present_line_number = 0, &
29 last_line_number = 0, &
31 INTEGER,
DIMENSION(:),
POINTER :: input_line_numbers => null()
32 CHARACTER(LEN=max_line_length), &
33 DIMENSION(:),
POINTER :: input_lines => null()
34 TYPE(buffer_type),
POINTER :: sub_buffer => null()
39 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'cp_parser_buffer_types'
40 INTEGER,
PARAMETER,
PRIVATE :: buffer_size = 1000
51 TYPE(buffer_type),
POINTER :: buffer
53 cpassert(.NOT.
ASSOCIATED(buffer))
55 buffer%size = buffer_size
56 ALLOCATE (buffer%input_lines(buffer%size))
57 ALLOCATE (buffer%input_line_numbers(buffer%size))
58 buffer%present_line_number = buffer%size
59 buffer%last_line_number = buffer%size
69 TYPE(buffer_type),
POINTER :: buffer
71 cpassert(
ASSOCIATED(buffer))
72 DEALLOCATE (buffer%input_lines)
73 DEALLOCATE (buffer%input_line_numbers)
74 IF (
ASSOCIATED(buffer%sub_buffer))
THEN
89 TYPE(buffer_type),
POINTER :: buffer_in, buffer_out
90 LOGICAL,
INTENT(IN),
OPTIONAL :: force
95 cpassert(
ASSOCIATED(buffer_in))
96 cpassert(
ASSOCIATED(buffer_out))
97 cpassert(buffer_in%size == buffer_out%size)
99 IF (
PRESENT(force)) my_force = force
101 buffer_out%present_line_number = buffer_in%present_line_number
102 buffer_out%last_line_number = buffer_in%last_line_number
103 buffer_out%istat = buffer_in%istat
105 IF ((buffer_out%buffer_id /= buffer_in%buffer_id) .OR. (my_force))
THEN
106 buffer_out%buffer_id = buffer_in%buffer_id
107 buffer_out%input_line_numbers = buffer_in%input_line_numbers
109 DO i = 1,
SIZE(buffer_in%input_lines)
110 buffer_out%input_lines(i) = buffer_in%input_lines(i)
113 IF (
ASSOCIATED(buffer_in%sub_buffer) .AND.
ASSOCIATED(buffer_out%sub_buffer))
THEN
126 TYPE(buffer_type),
POINTER :: sub_buffer, buffer
128 cpassert(
ASSOCIATED(buffer))
129 cpassert(.NOT.
ASSOCIATED(sub_buffer))
132 sub_buffer%present_line_number = 0
143 TYPE(buffer_type),
POINTER :: sub_buffer, buffer
145 cpassert(
ASSOCIATED(buffer))
146 cpassert(
ASSOCIATED(sub_buffer))
a module to allow simple buffering of read lines of a parser
recursive subroutine, public copy_buffer_type(buffer_in, buffer_out, force)
Copies buffer types.
subroutine, public initialize_sub_buffer(sub_buffer, buffer)
Initializes sub buffer structure.
subroutine, public create_buffer_type(buffer)
Creates the parser buffer type.
recursive subroutine, public release_buffer_type(buffer)
Releases the parser buffer type.
subroutine, public finalize_sub_buffer(sub_buffer, buffer)
Finalizes sub buffer structure.
Defines the basic variable types.
integer, parameter, public max_line_length