diff --git a/include/bx/bx.h b/include/bx/bx.h index 7ada4b2..5dc404d 100644 --- a/include/bx/bx.h +++ b/include/bx/bx.h @@ -8,6 +8,7 @@ #include // uint32_t #include // size_t +#include // memcpy #include "config.h" #include "macros.h" @@ -52,6 +53,32 @@ namespace bx return 0 == (un.addr & (_align-1) ); } + /// Scatter/gather memcpy. + inline void memcpy(void* _dst, const void* _src, uint32_t _size, uint32_t _num = 1, uint32_t _srcPitch = 0, uint32_t _dstPitch = 0) + { + const uint8_t* src = (const uint8_t*)_src; + uint8_t* dst = (uint8_t*)_dst; + + for (uint32_t ii = 0; ii < _num; ++ii) + { + ::memcpy(dst, src, _size); + src += _srcPitch; + dst += _dstPitch; + } + } + + /// + inline void gather(void* _dst, const void* _src, uint32_t _size, uint32_t _num = 1, uint32_t _srcPitch = 0) + { + memcpy(_dst, _src, _size, _num, _srcPitch, _size); + } + + /// + inline void scatter(void* _dst, const void* _src, uint32_t _size, uint32_t _num = 1, uint32_t _dstPitch = 0) + { + memcpy(_dst, _src, _size, _num, _size, _dstPitch); + } + } // namespace bx // Annoying C++0x stuff..