#ifndef TH_GENERIC_FILE #define TH_GENERIC_FILE "generic/THStorageCopy.c" #else void THStorage_(rawCopy)(THStorage *storage, real *src) { ptrdiff_t i; for(i = 0; i < storage->size; i++) storage->data[i] = src[i]; } void THStorage_(copy)(THStorage *storage, THStorage *src) { THArgCheck(storage->size == src->size, 2, "size mismatch"); THStorage_(rawCopy)(storage, src->data); } #define IMPLEMENT_THStorage_COPY(TYPENAMESRC) \ void THStorage_(copy##TYPENAMESRC)(THStorage *storage, TH##TYPENAMESRC##Storage *src) \ { \ ptrdiff_t i; \ for(i = 0; i < storage->size; i++) \ storage->data[i] = (real)src->data[i]; \ } #define IMPLEMENT_THStorage_COPY_FROM_HALF(TYPENAMESRC) \ void THStorage_(copy##TYPENAMESRC)(THStorage *storage, TH##TYPENAMESRC##Storage *src) \ { \ THArgCheck(storage->size == src->size, 2, "size mismatch"); \ ptrdiff_t i; \ for(i = 0; i < storage->size; i++) \ storage->data[i] = (real)TH_half2float(src->data[i]); \ } #define IMPLEMENT_THStorage_COPY_TO_HALF(TYPENAMESRC) \ void THStorage_(copy##TYPENAMESRC)(THStorage *storage, TH##TYPENAMESRC##Storage *src) \ { \ THArgCheck(storage->size == src->size, 2, "size mismatch"); \ ptrdiff_t i; \ for(i = 0; i < storage->size; i++) \ storage->data[i] = TH_float2half((float)(src->data[i])); \ } #define IMPLEMENT_THStorage_COPY_TO_FROM_HALF(TYPENAMESRC) \ void THStorage_(copy##TYPENAMESRC)(THStorage *storage, TH##TYPENAMESRC##Storage *src) \ { \ THArgCheck(storage->size == src->size, 2, "size mismatch"); \ ptrdiff_t i; \ for(i = 0; i < storage->size; i++) \ storage->data[i] = src->data[i]; \ } #ifndef TH_REAL_IS_HALF IMPLEMENT_THStorage_COPY(Byte) IMPLEMENT_THStorage_COPY(Char) IMPLEMENT_THStorage_COPY(Short) IMPLEMENT_THStorage_COPY(Int) IMPLEMENT_THStorage_COPY(Long) IMPLEMENT_THStorage_COPY(Float) IMPLEMENT_THStorage_COPY(Double) IMPLEMENT_THStorage_COPY_FROM_HALF(Half) #else /* only allow pass-through for Half */ IMPLEMENT_THStorage_COPY_TO_FROM_HALF(Half) IMPLEMENT_THStorage_COPY_TO_HALF(Byte) IMPLEMENT_THStorage_COPY_TO_HALF(Char) IMPLEMENT_THStorage_COPY_TO_HALF(Short) IMPLEMENT_THStorage_COPY_TO_HALF(Int) IMPLEMENT_THStorage_COPY_TO_HALF(Long) IMPLEMENT_THStorage_COPY_TO_HALF(Float) IMPLEMENT_THStorage_COPY_TO_HALF(Double) #endif #endif