template<> type* sg_generic_malloc<type >(size_t len) \
{ \
return new type[len](); \
} \
\
template<> type* sg_generic_calloc<type >(size_t len) \
{ \
return new type[len](); \
} \
\
template<> type* sg_generic_realloc<type >(type* ptr, size_t old_len, size_t len) \
{ \
type* new_ptr = new type[len](); \
size_t min_len=old_len; \
if (len<min_len) \
min_len=len; \
for (size_t i=0; i<min_len; i++) \
new_ptr[i]=ptr[i]; \
delete[] ptr; \
return new_ptr; \
} \
\
template<> void sg_generic_free<type >(type* ptr) \
{ \
delete[] ptr; \
}