librtl

collect_alloc.h

This is the verbatim text of the collect_alloc.h include file.
#ifndef collect_alloc_h
#define collect_alloc_h

#include <stdlib.h>
#include <iostream.h>

class dyn_collectable;

#ifdef NOBOOL
typedef int bool;

#define true  1
#define false 0
#endif


class collect_alloc
{
    friend class dyn_collectable;

    struct dc_link
    {
        dc_link( dyn_collectable* _dc, dc_link* _n )
            {
                dc = _dc, n = _n;
            }
        ~dc_link();
        dyn_collectable* dc;
        dc_link* n;
    } *objects;

    bool dieing;
    
    collect_alloc()
            : objects(0), dieing(false)
        {}
    

    void collect( dyn_collectable* );

    static collect_alloc def_collector;

public:        


    ~collect_alloc();


    static collect_alloc* default_collector();
};


class dyn_collectable
{
    friend class collect_alloc;
    
    static collect_alloc* alloc;

public:
    
    virtual ~dyn_collectable()
        {}


    void* operator new( size_t size )
        {
            dyn_collectable* o = (dyn_collectable*)::operator new(size);
            alloc->collect(o);
            return (void*)o;
        }


    void operator delete( void* _o )
        {
            if(alloc->dieing) ::operator delete(_o);
        }


    static void collector( collect_alloc* );
    

    static collect_alloc* collector();
    
};
    
#endif


JSP / librtl v0.2 mtigges@cpsc.ucalgary.ca