packages feed

foreign-store-0.2.1: cbits/store.c

#include <stdlib.h>
#include <memory.h>
#include <stdint.h>

void **values = NULL;
size_t size = 0;

uint32_t x_store(void*value) {
  int no_slot = 1;
  uint32_t i;
  uint32_t index;
  for (i = 0; i < size; i++) {
    if (values[i] == NULL) {
      index = i;
      no_slot = 0;
      break;
    }
  }
  if (values == NULL || no_slot) {
    size++;
    values = realloc(values,size * sizeof(void*));
    index = size-1;
  }
  values[index] = value;
  return index;
}

void x_set(uint32_t index,void*value) {
  if (index + 1 > size) {
    size_t new_size = index + 1;
    values = realloc(values,new_size * sizeof(void*));
    memset(values + size,0,(new_size - size)*sizeof(void*));
    size = new_size;
  }
  values[index] = value;
}

void *x_get(uint32_t index) {
  if (index >= 0 && index < size) {
    return values[index];
  } else {
    return NULL;
  }
}

uint32_t x_lookup(uint32_t index) {
  if (values == NULL)
    return 0;
  else {
    if (index >= 0 && index < size) {
      return values[index] == NULL? 0 : 1;
    } else {
      return 0;
    }
  }
}

void x_delete(uint32_t index) {
  values[index] = NULL;
}