Skip to content
maxymania edited this page Mar 22, 2013 · 1 revision
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"

#include "mem_pool.h"


/* the Lua interpreter */
lua_State* L;

static void *me_alloc (void *ud, void *ptr, size_t osize, size_t nsize)
{
    MPool* pool = ud;
    void *nptr;
    if(nsize==0){
        if(ptr)
            MPool_Free(pool,ptr);
        return NULL;
    }
    if(ptr==NULL){
        nptr=MPool_Allocate(pool,nsize);
        if(!nptr){
            MPool_Collectfree(pool);
            nptr=MPool_Allocate(pool,nsize);
        }
        return nptr;
    }else{
        if(osize>=nsize)return ptr;
        nptr=MPool_Allocate(pool,nsize);
        if(!nptr){
            MPool_Collectfree(pool);
            nptr=MPool_Allocate(pool,nsize);
        }
        if(!nptr)return NULL;
        memcpy(nptr,ptr,osize);
        MPool_Free(pool,ptr);
        return nptr;
    }
}


// Will result in 16 MiB
#define HEAP 1<<24

int main ( int argc, char *argv[] )
{
    MPool* pool = malloc(sizeof(MPool));
    MPool_Init(pool,malloc(HEAP),HEAP);
    /* initialize Lua */
    //L = luaL_newstate();
    L = lua_newstate(me_alloc,pool);
    /* load various Lua libraries */
    luaL_openlibs(L);
    luaopen_table(L);
    luaopen_io(L);
    luaopen_string(L);
    luaopen_math(L);
    luaL_dofile(L, "tree.lua");

    /* cleanup Lua */
    lua_close(L);

    return 0;
}

Clone this wiki locally