#ifndef DNEW_HH
# define DNEW_HH

# include <new.h>
# include "dmem.h"

# ifdef DMEM

#  ifdef new 
#   undef new
#  endif // new

#  ifdef delete
#   undef delete
#  endif // delete

#  ifdef _QNX
/*
 * QNX C++ compiler is outdated : we need to have "old school"
 * dynamic memory operators' declarations. Moreaover the code is
 * inline as it appeazrs that otherwise the operators are always
 * overloading C++ standard operators (even if DMEM is not defined). 
 */
inline void *operator new(size_t size) {
  return dmalloc(size);
}

inline void operator delete(void *ptr) {
  dfree(ptr);
}

inline void *operator new[](size_t size) {
  return dmalloc(size);
}

inline void operator delete[](void *ptr) {
  dfree(ptr);
} 

#  else // !defined(_QNX)

inline void *operator new(size_t size, const std::nothrow_t &) throw() {
  return dmalloc(size);
}
void *operator new(size_t size) throw(std::bad_alloc);

inline void operator delete(void *ptr, const std::nothrow_t &) throw() {
  return dfree(ptr);
}
void operator delete(void *ptr) throw();

inline void *operator new[](size_t size, const std::nothrow_t &) throw() {
  return dmalloc(size);
}
void *operator new[](size_t size) throw(std::bad_alloc);

inline void operator delete[](void *ptr, const std::nothrow_t &) throw() {
  return dfree(ptr);
}
void operator delete[](void *ptr) throw();

#  endif // _QNX 

# endif // DMEM

#endif // DNEW_HH
