LINUX.ORG.RU

История изменений

Исправление beastie, (текущая версия) :

Пожалуйтса, реализация в одном файле:

#include <assert.h>
#include <stdlib.h>

static void **map;
static size_t size;

void
init(size_t n)
{
        size = n;
        map = calloc(size, sizeof(void *));
        assert(map);
}

void
set(size_t pos, void *val)
{
        assert(pos < size);
        map[pos] = val;
}

void *
get(size_t pos)
{
        assert(pos < size);
        return map[pos];
}

void
del(size_t pos)
{
        set(pos, NULL);
}

int
has(size_t pos)
{
        assert(pos < size);
        return map[pos] != NULL;
}

void
kill(void)
{
        free(map);
}

#if 0
int
main()
{
        int *p, i;

        init(100);
        set(10, &i);
        p = get(10);
        assert(p == &i);
        del(10);
        kill();

        return 0;
}
#endif

Исходная версия beastie, :

Пожалуйтса, реализация в одном файле:

#include <assert.h>
#include <stdlib.h>

static void **map;
static size_t size;

void
init(size_t n)
{
        size = n;
        map = calloc(size, sizeof(void *));
        assert(map);
}

void
set(size_t pos, void *val)
{
        assert(pos < size);
        map[pos] = val;
}

void *
get(size_t pos)
{
        return map[pos];
}

void
del(size_t pos)
{
        set(pos, NULL);
}

void
kill(void)
{
        free(map);
}

#if 0
int
main()
{
        int *p, i;

        init(100);
        set(10, &i);
        p = get(10);
        assert(p == &i);
        del(10);
        kill();

        return 0;
}
#endif