blob: 0ce5035edf04b8d7132529827a2c54dc12b96028 [file] [log] [blame]
#ifndef TH_GENERIC_FILE
#define TH_GENERIC_FILE "TH/generic/THStorageCopy.cpp"
#else
void THStorage_(rawCopy)(THStorage *storage, scalar_t *src)
{
ptrdiff_t i;
scalar_t *data = THStorage_(data)(storage);
for(i = 0; i < storage->numel(); i++)
data[i] = src[i];
}
void THStorage_(copy)(THStorage *storage, THStorage *src)
{
THArgCheck(storage->numel() == src->numel(), 2, "size mismatch");
THStorage_(rawCopy)(storage, THStorage_(data)(src));
}
// NOTE: for performance, these macros generally use the raw data pointer in the inner loops,
// rather than repeated THStorage_(data) calls.
#define IMPLEMENT_THStorage_COPY(TYPENAMESRC) \
void THStorage_(copy##TYPENAMESRC)(THStorage *storage, TH##TYPENAMESRC##Storage *src) \
{ \
ptrdiff_t i; \
auto data = THStorage_(data)(storage); \
auto src_data = TH##TYPENAMESRC##Storage_data(src); \
for(i = 0; i < storage->numel(); i++) \
data[i] = static_cast<scalar_t>(src_data[i]); \
}
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(Half)
IMPLEMENT_THStorage_COPY(Bool)
#endif