view dmd/mem.h @ 1112:829ac3f30103

Updating revisions.pl.in: - Change the way the LLVM SVN revision is detected, using `svn info` instead of `svnversion`. This speeds it up significantly on my machine (especially when the LLVM SVN checkout isn't in disk cache). - Add "last changed date" to SVN checkouts too, not just unpacked tarballs - No longer rely on SVN revision to detect release vs trunk checkouts, treat release checkout the same as unpacked release tarball. (Except for date determination, which uses SVN date instead of filesystem date)
author Frits van Bommel <fvbommel wxs.nl>
date Fri, 13 Mar 2009 16:18:01 +0100
parents c53b6e3fe49a
children
line wrap: on
line source

// Copyright (C) 2000-2001 by Chromium Communications
// All Rights Reserved

#ifndef ROOT_MEM_H
#define ROOT_MEM_H

#include <stddef.h>	// for size_t

typedef void (*FINALIZERPROC)(void* pObj, void* pClientData);

struct GC;			// thread specific allocator

struct Mem
{
    GC *gc;			// pointer to our thread specific allocator
    Mem() { gc = NULL; }

    void init();

    // Derive from Mem to get these storage allocators instead of global new/delete
    void * operator new(size_t m_size);
    void * operator new(size_t m_size, Mem *mem);
    void * operator new(size_t m_size, GC *gc);
    void operator delete(void *p);

    void * operator new[](size_t m_size);
    void operator delete[](void *p);

    char *strdup(const char *s);
    void *malloc(size_t size);
    void *malloc_uncollectable(size_t size);
    void *calloc(size_t size, size_t n);
    void *realloc(void *p, size_t size);
    void free(void *p);
    void free_uncollectable(void *p);
    void *mallocdup(void *o, size_t size);
    void error();
    void check(void *p);	// validate pointer
    void fullcollect();		// do full garbage collection
    void fullcollectNoStack();	// do full garbage collection, no scan stack
    void mark(void *pointer);
    void addroots(char* pStart, char* pEnd);
    void removeroots(char* pStart);
    void setFinalizer(void* pObj, FINALIZERPROC pFn, void* pClientData);
    void setStackBottom(void *bottom);
    GC *getThreadGC();		// get apartment allocator for this thread
};

extern Mem mem;

#endif /* ROOT_MEM_H */