polkadot-js/client

View on GitHub
packages/client-runtime/src/memory/index.ts

Summary

Maintainability
A
2 hrs
Test Coverage
// Copyright 2017-2019 @polkadot/client-runtime authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.

import { Pointer, RuntimeEnv, RuntimeInterfaceMemory } from '../types';

import instrument from '../instrument';
import memcpy from './memcpy';
import memcmp from './memcmp';
import memmove from './memmove';
import memset from './memset';

export default function memory ({ heap }: RuntimeEnv): RuntimeInterfaceMemory {
  return {
    free: (ptr: Pointer): void =>
      instrument('free', (): void => {
        // l.debug(() => ['free', [ptr]]);

        heap.deallocate(ptr);
      }),
    malloc: (size: number): Pointer =>
      instrument('malloc', (): Pointer => {
        const ptr = heap.allocate(size);

        // l.debug(() => ['malloc', [size], '->', ptr]);

        return ptr;
      }),
    memcpy: (dst: Pointer, src: Pointer, num: number): Pointer =>
      instrument('memcpy', (): Pointer => {
        // l.debug(() => ['memcpy', [dst, src, num]]);

        return memcpy(heap, dst, src, num);
      }),
    memcmp: (s1: Pointer, s2: Pointer, length: number): number =>
      instrument('memcmp', (): number => {
        // l.debug(() => ['memcmp', [s1, s2, length]]);

        return memcmp(heap, s1, s2, length);
      }),
    memmove: (dst: Pointer, src: Pointer, num: number): Pointer =>
      instrument('memmove', (): Pointer => {
        // l.debug(() => ['memmove', [dst, src, num]]);

        return memmove(heap, dst, src, num);
      }),
    memset: (dst: Pointer, val: number, num: number): Pointer =>
      instrument('memset', (): Pointer => {
        // l.debug(() => ['memset', [dst, val, num]]);

        return memset(heap, dst, val, num);
      })
  };
}