/* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator http://lammps.sandia.gov, Sandia National Laboratories Steve Plimpton, sjplimp@sandia.gov Copyright (2003) Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains certain rights in this software. This software is distributed under the GNU General Public License. See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ #include "stdio.h" #include "stdlib.h" #include "string.h" #include "memory.h" #include "error.h" using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ Memory::Memory(LAMMPS *lmp) : Pointers(lmp) {} /* ---------------------------------------------------------------------- safe malloc ------------------------------------------------------------------------- */ void *Memory::smalloc(bigint nbytes, const char *name) { if (nbytes == 0) return NULL; #if defined(LAMMPS_MEMALIGN) void *ptr; int retval = posix_memalign(&ptr, LAMMPS_MEMALIGN, nbytes); if (retval) ptr = NULL; #else void *ptr = malloc(nbytes); #endif if (ptr == NULL) { char str[128]; sprintf(str,"Failed to allocate " BIGINT_FORMAT " bytes for array %s", nbytes,name); error->one(FLERR,str); } return ptr; } /* ---------------------------------------------------------------------- safe realloc ------------------------------------------------------------------------- */ void *Memory::srealloc(void *ptr, bigint nbytes, const char *name) { if (nbytes == 0) { destroy(ptr); return NULL; } ptr = realloc(ptr,nbytes); if (ptr == NULL) { char str[128]; sprintf(str,"Failed to reallocate " BIGINT_FORMAT " bytes for array %s", nbytes,name); error->one(FLERR,str); } return ptr; } /* ---------------------------------------------------------------------- safe free ------------------------------------------------------------------------- */ void Memory::sfree(void *ptr) { if (ptr == NULL) return; free(ptr); } /* ---------------------------------------------------------------------- erroneous usage of templated create/grow functions ------------------------------------------------------------------------- */ void Memory::fail(const char *name) { char str[128]; sprintf(str,"Cannot create/grow a vector/array of pointers for %s",name); error->one(FLERR,str); }