diff --git a/src/internal/pointer/double-pointer.ts b/src/internal/pointer/double-pointer.ts index 33198c2e..8bfd73c3 100644 --- a/src/internal/pointer/double-pointer.ts +++ b/src/internal/pointer/double-pointer.ts @@ -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(func: (pointer: DoublePointer) => TReturnType): TReturnType { const pointer = new DoublePointer(); try { return func(pointer); } finally { - ImageMagick._api._free(pointer.instance); + ImageMagick._api._free(pointer.ptr); } } } diff --git a/src/internal/pointer/int-pointer.ts b/src/internal/pointer/int-pointer.ts index 51ba7544..22fa47fb 100644 --- a/src/internal/pointer/int-pointer.ts +++ b/src/internal/pointer/int-pointer.ts @@ -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(func: (pointer: IntPointer) => TReturnType): TReturnType { const pointer = new IntPointer(); try { return func(pointer); } finally { - ImageMagick._api._free(pointer.instance); + ImageMagick._api._free(pointer.ptr); } } } diff --git a/src/internal/pointer/pointer.ts b/src/internal/pointer/pointer.ts new file mode 100644 index 00000000..c416b609 --- /dev/null +++ b/src/internal/pointer/pointer.ts @@ -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); } +}