drive_engine_grouped Interface

interface
public module subroutine drive_engine_grouped(keys, nrows, proc, perm, threads, group_offsets, group_ekeys)

Arguments

Type IntentOptional Attributes Name
type(sort_key_buf), intent(in), target :: keys(:)

the keys, primary first.

integer(kind=int64), intent(in) :: nrows

rows each key describes.

character(len=*), intent(in) :: proc

calling procedure, for messages.

integer(kind=int64), intent(out), allocatable :: perm(:)

the 1-based permutation.

integer, intent(in), optional :: threads

thread request; absent = auto.

integer(kind=int64), intent(out), optional, allocatable :: group_offsets(:)

group bounds.

integer, intent(in), optional :: group_ekeys

ENGINE keys defining a group; absent = all.

Description

drive_engine, plus the group boundaries when group_offsets is asked for.

Absent group_offsets is exactly drive_engine, one-shot fast path and all. Present, it routes through engine_build_runs instead, which always uses the builder -- so asking for boundaries costs one extra copy of a single key. That is the documented price of one entry point serving three operations rather than three of them.