Quick actions

cmd+k|ctrl+k

Navigation

Languages

PointerList

Snippet info

Language

C

Visibility

public

Author

evine

Created

2016-04-07T00:44:20Z

Updated

2016-04-08T15:59:06Z

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

#define PointerListCreate(Name, ListSize)                           \
static size_t Name##Size = ListSize;                                \
static void *Name##List[ListSize] = {};                             \
static size_t Name##Stack = 0;                                      \
static void *Name##Allocate(size_t TypeSize, size_t Size)           \
{                                                                   \
    void *Result;                                                   \
    assert(Name## Stack < Name##Size && "PointerList is to small"); \
    Result = calloc(Size, sizeof(TypeSize));                        \
    assert(Result && "calloc allocation has failed");               \
    Name##List[Name##Stack++] = Result;                             \
    return Result;                                                  \
}                                                                   \
static void Name##Free()                                            \
{                                                                   \
    for(size_t i = 0; i < Name##Stack; i++)                         \
    {                                                               \
        free(Name##List[i]);                                        \
    }                                                               \
}
PointerListCreate(MainSystem, 64*1024)



typedef struct{
    size_t size;
    int *item;
}apple; 

apple apple_init(int size)
{
    apple result;
    
    result.size = size;
    result.item = MainSystemAllocate(sizeof(result.item[0]), size);
    
    return result;
}

int main()
{
    apple har[1024];
    for(int i = 0; i < 1024; i++)
    {
        har[i] = apple_init(20);
    }
    
    har[739].item[13] = 5563;
    printf("%i\n", har[739].item[13]);
    
    MainSystemFree(); // Free the system, No more manual pointer handling.
    return 0;
}
INFO