Skip to content

Commit

Permalink
Create base class for pointers.
Browse files Browse the repository at this point in the history
dlemstra committed Aug 1, 2024
1 parent b6c2b7d commit 07c12ae
Showing 3 changed files with 28 additions and 20 deletions.
14 changes: 4 additions & 10 deletions src/internal/pointer/double-pointer.ts
Original file line number Diff line number Diff line change
@@ -2,26 +2,20 @@
// Licensed under the Apache License, Version 2.0.

import { ImageMagick } from '../../image-magick';
import { Pointer } from './pointer';

/** @internal */
export class DoublePointer {
private readonly instance: number;

export class DoublePointer extends Pointer {
private constructor() {
this.instance = ImageMagick._api._malloc(8);
ImageMagick._api.setValue(this.instance, 0, 'double');
super(8, 'double');
}

get ptr(): number { return this.instance; }

get value(): number { return ImageMagick._api.getValue(this.instance, 'double'); }

static use<TReturnType>(func: (pointer: DoublePointer) => TReturnType): TReturnType {
const pointer = new DoublePointer();
try {
return func(pointer);
} finally {
ImageMagick._api._free(pointer.instance);
ImageMagick._api._free(pointer.ptr);
}
}
}
14 changes: 4 additions & 10 deletions src/internal/pointer/int-pointer.ts
Original file line number Diff line number Diff line change
@@ -2,26 +2,20 @@
// Licensed under the Apache License, Version 2.0.

import { ImageMagick } from '../../image-magick';
import { Pointer } from './pointer';

/** @internal */
export class IntPointer {
private readonly instance: number;

export class IntPointer extends Pointer {
private constructor() {
this.instance = ImageMagick._api._malloc(4);
ImageMagick._api.setValue(this.instance, 0, 'i32');
super(4, 'i32');
}

get ptr(): number { return this.instance; }

get value(): number { return ImageMagick._api.getValue(this.instance, 'i32'); }

static use<TReturnType>(func: (pointer: IntPointer) => TReturnType): TReturnType {
const pointer = new IntPointer();
try {
return func(pointer);
} finally {
ImageMagick._api._free(pointer.instance);
ImageMagick._api._free(pointer.ptr);
}
}
}
20 changes: 20 additions & 0 deletions src/internal/pointer/pointer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Copyright Dirk Lemstra https://github.com/dlemstra/magick-wasm.
// Licensed under the Apache License, Version 2.0.

import { ImageMagick } from '../../image-magick';

/** @internal */
export abstract class Pointer {
private readonly instance: number;
private readonly type: string;

protected constructor(size: number, type: string) {
this.instance = ImageMagick._api._malloc(size);
this.type = type;
ImageMagick._api.setValue(this.instance, 0, this.type);
}

get ptr(): number { return this.instance; }

get value(): number { return ImageMagick._api.getValue(this.instance, this.type); }
}

0 comments on commit 07c12ae

Please sign in to comment.