#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

MODULE = Tie::Array::Pointer  PACKAGE = Tie::Array::Pointer

PROTOTYPES: DISABLE

void *
tsp_malloc(bytes)
    size_t bytes

  CODE:
    void *buffer;

    # // printf("tsp_malloc(%d)\n", bytes);
    buffer = safemalloc(bytes);
    RETVAL = buffer;

  OUTPUT:
    RETVAL

void
tsp_free(buffer)
    void *buffer

  CODE:
    if (buffer) safefree(buffer);

# /* write 1 byte */
void
tsp_w8(buffer, i8)
    void *buffer;
    I32 i8;

  CODE:
    char *b = (char *) buffer;
    *b      = i8;

# /* write 2 bytes */
void
tsp_w16(buffer, i16)
    void *buffer;
    I16 i16;

  CODE:
    I16 *b = (I16 *) buffer;
    *b     = i16;

# /* write 4 bytes */
void
tsp_w32(buffer, i32)
    void *buffer;
    I32 i32;

  CODE:
    I32 *b = (I32 *) buffer;
    *b     = i32;

# /* read 1 byte */
I32
tsp_r8(buffer)
    void *buffer;

  CODE:
    char *b = (char *) buffer;
    RETVAL  = (I32) *b;
    # // printf("read %d at %08x\n", RETVAL, b);

  OUTPUT:
    RETVAL

# /* read 2 bytes */
I16
tsp_r16(buffer)
    void *buffer;

  CODE:
    I16 *b = (I16 *) buffer;
    RETVAL = *b;

  OUTPUT:
    RETVAL

# /* read 4 bytes */
I32
tsp_r32(buffer)
    void *buffer;

  CODE:
    I32 *b = (I32 *) buffer;
    RETVAL = *b;

  OUTPUT:
    RETVAL

# /* a comment in .xs files needs to start w/ /^#\s+/ */
# /* $Id */