#include <stdlib.h>
#include <stdio.h>

typedef struct Cheapmap Cheapmap;

struct Cheapmap {
    unsigned count;
    void *table[256];
};

void insert(Cheapmap *chm, void *p)
{
    unsigned char *u = p;
    
    if (chm->table[*u] == NULL) {
        chm->table[*u] = p;
        chm->count++;
    }
}

void **keys(Cheapmap *chm)
{
    void **k = calloc(chm->count + 1, sizeof(*k));
    void **p = k;
    
    unsigned i;
    
    for (i = 0; i < 256; i++) {
        if (chm->table[i]) *p++ = chm->table[i];
    }
    
    return k;
}


int main()
{
    Cheapmap chm = {0};
    
    insert(&chm, "banana");
    insert(&chm, "strawberry");
    insert(&chm, "apple");
    insert(&chm, "papaya");
    
    void **k = keys(&chm);
    unsigned i = 0;
    
    while (k[i]) {
        puts(k[i]);
        i++;
    }
    
    free(k);
    
    return 0;
}
