home *** CD-ROM | disk | FTP | other *** search
- /* builtin_vec_new() und builtin_vec_delete, für new[] und delete [] */
-
- typedef void (*vfp)(void);
-
- void *__builtin_new(unsigned long Anz);
- void __builtin_delete(unsigned long *p);
-
- void default_new_handler ();
-
- extern vfp __new_handler;
-
- void *
- __builtin_vec_new (p, maxindex, size, ctor)
- void *p;
- int maxindex, size;
- void (*ctor)(void *);
- {
- int i, nelts = maxindex + 1;
- void *rval;
-
- if (p == 0)
- p = (void *)__builtin_new (nelts * size);
-
- rval = p;
-
- for (i = 0; i < nelts; i++)
- {
- (*ctor) (p);
- p += size;
- }
-
- return rval;
- }
-
-
- void
- __builtin_vec_delete (ptr, maxindex, size, dtor, auto_delete_vec, auto_delete)
- void *ptr;
- int maxindex, size;
- void (*dtor)();
- int auto_delete;
- {
- int i, nelts = maxindex + 1;
- void *p = ptr;
-
- ptr += nelts * size;
-
- for (i = 0; i < nelts; i++)
- {
- ptr -= size;
- (*dtor) (ptr, auto_delete);
- }
-
- if (auto_delete_vec)
- __builtin_delete (p);
- }
-
-