View Javadoc

1   package com.tapina.robe.swi.clib.string;
2   
3   import com.tapina.robe.runtime.ByteArray;
4   import com.tapina.robe.runtime.Environment;
5   import com.tapina.robe.runtime.MemoryMap;
6   import com.tapina.robe.swi.clib.Stub;
7   
8   /***
9    * This function copies a3 characters from a2 to a1.
10   * The areas to be copied may overlap, because it first of all copies from a2 to a temporary buffer and then
11   * copies from there to a1. This makes it slower than memcpy.
12   * Returns: a1
13   */
14  public class MemMove extends Stub {
15      public void executeStub(Environment environment) {
16          final MemoryMap memoryMap = environment.getMemoryMap();
17          final int[] R = environment.getCpu().R;
18          final int count = R[2];
19          final byte[] data = memoryMap.getBytes(R[1], count);
20          final ByteArray ptr1 = memoryMap.getByteArray(R[0], count, true);
21          System.arraycopy(data, 0, ptr1.getArray(), ptr1.getOffset(), count);
22      }
23  }