Function tryImportOwnedRaster

Imports one retained raster backed by one OwnedByteResource.

OwnedRasterImportResult tryImportOwnedRaster(T)(
  ref OwnedByteResource resource,
  scope const(PlaneByteLayout)[] planes,
  Region2D residentRegion,
  ref RasterLease!T lease
) @safe;

The function itself is @safe.

The unsafe ownership claim has already occurred when the external physical resource was wrapped in OwnedByteResource.

Ownership semantics:

PRE-COMMIT failure: resource remains armed; lease remains unchanged.

success

resource is disarmed; lease retains the physical resource.

POST-COMMIT failure: resource is disarmed; retained construction has released the physical resource exactly once; no new lease is published.

lease must be empty on entry.

Multiple PlaneByteLayout entries may describe multiple logical planes within the same physical allocation.

Example

Example importing one owned 2 x 2 ubyte raster.

import core.stdc.stdlib : malloc;
import raster;

void* memory = malloc(4);
assert(memory !is null);
auto samples = (cast(ubyte*) memory)[0 .. 4];
samples[] = [1, 2, 3, 4];

OwnedByteResource resource;
assert(tryAdoptMallocResource(memory, 4, resource));

const PlaneByteLayout[1] planes = [PlaneByteLayout(0, 2, 1)];
RasterLease!ubyte lease;

const result = tryImportOwnedRaster!ubyte(
    resource,
    planes[],
    Region2D(0, 0, 2, 2),
    lease
);

assert(result.ok);
assert(result.resourceDisposition == OwnedRasterResourceDisposition.transferredToLease);
assert(!resource.ownsResource);

scope auto view = lease.view();
ubyte value;
assert(view.trySample(0, 1, 1, value));
assert(value == 4);