Annotation of researchv9/jerq/src/lib/C/_new.c, revision 1.1

1.1     ! root        1: #include <jerq.h>
        !             2: typedef void* PV;
        !             3: typedef void (*PF)(PV);
        !             4: typedef void (*PFVV)();
        !             5: 
        !             6: PFVV _new_handler = 0;
        !             7: 
        !             8: PFVV set_new_handler(PFVV handler)
        !             9: {
        !            10:        PFVV rr = _new_handler;
        !            11:        _new_handler = handler;
        !            12:        return rr;
        !            13: }
        !            14: 
        !            15: PV _new(unsigned size)
        !            16: {
        !            17:        char* p;
        !            18: /*     extern char* alloc(unsigned);    not for mux! */
        !            19:        while ( (p=alloc(size))==0 ) {
        !            20:                if(_new_handler)
        !            21:                        (*_new_handler)();
        !            22:                else return 0;
        !            23:        }
        !            24:        return PV(p);
        !            25: }
        !            26: 
        !            27: void _delete(PV p)
        !            28: {
        !            29:        if (p) free( (char*)p );
        !            30: }
        !            31: 
        !            32: PV _vec_new(PV op, int n, int sz, PV f)
        !            33: /*
        !            34:        allocate a vector of "n" elements of size "sz"
        !            35:        and initialize each by a call of "f"
        !            36: */
        !            37: {
        !            38:        register int i;
        !            39:        register char* p;
        !            40:        if (op == 0) op = PV( new char[n*sz] );
        !            41:        p = (char*) op;
        !            42:        for (i=0; i<n; i++) ( *PF(f) )( PV(p+i*sz) );
        !            43:        return PV(p);
        !            44: }
        !            45: 
        !            46: void _vec_delete(PV op, int n, int sz, PV f)
        !            47: {
        !            48:        register int i;
        !            49:        register char* p = (char*) op;
        !            50:        for (i=0; i<n; i++) ( *(PF)f )( (PV)(p+i*sz) );
        !            51: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.