Annotation of researchv9/jerq/src/lib/C/_new.c, revision 1.1.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.