# ParallelScanBody

[req.parallel_scan]

A type Body satisfies ParallelScanBody if it meets the following requirements:

ParallelScanBody Requirements: Pseudo-Signature, Semantics

void Body::operator()(const Range &r, pre_scan_tag)

  Accumulates summary for range `r`. For example, when computing a running sum of an array, the summary for a range `r` is the sum of the array elements corresponding to `r`.

void Body::operator()(const Range &r, final_scan_tag)

  Computes scan result and summary for range `r`.

Body::Body(Body &b, split)

  Splits `b` so that `this` and `b` can accumulate summaries separately.

void Body::reverse_join(Body &b)

  Merges the summary accumulated by `b` into the summary accumulated by `this`, where `this` was created earlier from `b` by splitting constructor.

void Body::assign(Body &b)

  Assigns summary of `b` to `this`.

See also:

- parallel_scan algorithm