parquet_string_column_delete_by_mask Subroutine

public subroutine parquet_string_column_delete_by_mask(self, keep)

Keeps only the elements whose keep entry is .true., in order, compacting payload, offsets and validity in one O(nchars) in-place pass. keep must have exactly size() entries. Dropping every element leaves a valid empty column. Invalidates every outstanding handle into the column. Note this is the bulk counterpart of erase: deleting m elements one at a time costs O(m*nchars), this costs O(nchars) once.

Arguments

Type IntentOptional Attributes Name
type(parquet_string_column), intent(inout) :: self

the column.

logical, intent(in) :: keep(:)

.true. for every element to retain.


Source Code

    subroutine parquet_string_column_delete_by_mask(self, keep)
        type(parquet_string_column), intent(inout) :: self !! the column.
        logical, intent(in) :: keep(:)                      !! .true. for every element to retain.
        integer(int64) :: n
        integer :: nt
        n = self%nrows
        if (size(keep, kind=int64) /= n) then
            error stop EP//"delete_by_mask: mask length does not match the row count"
        end if
        if (n == 0_int64) return
        nt = bulk_threads(n, self%nchars)
        if (nt <= 1) then
            call delete_by_mask_serial(self, keep)
        else
            call delete_by_mask_parallel(self, keep, nt)
        end if
    end subroutine parquet_string_column_delete_by_mask