|
|
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.