////////////////////////////////////////////////////////////
// runtime.cpp Copyright 1994 Gregory Colvin.
// Free distribution OK with this notice.
//
#include "runtime.h"
static new_handler cur_new_handler;
new_handler set_new_handler(new_handler cur) throw() {
new_handler old= cur_new_handler;
cur_new_handler = cur;
return old;
}
static void* allocate_loop(size_t n) {
void* p=0;
for(;;) {
p = allocate(n);
if (p || !cur_new_handler)
break;
cur_new_handler( );
}
return p;
}
void* operator new(size_t n) throw (bad_alloc) {
if (n == 0) n++;
void* p= allocate_loop(n);
if (!p)
throw bad_alloc();
return p;
}
void* operator new[](size_t n) throw(bad_alloc) {
if (n == 0) n++;
void* p= allocate_loop(n);
if (!p)
throw bad_alloc();
return p;
}
void operator delete(void* p) throw() {
deallocate(p);
}
void operator delete[](void* p) throw() {
deallocate(p);
}
//End of File