|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.