#include #include "t32bitsrv_wrap.h" //================================================================================ int t32bitsrv::BufferExchanger::read(const char *srcBuf, int len) { m_data = (UCHAR *)memcpy(m_data, srcBuf, len); return len; } //-------------------------------------------------------------------------------- int t32bitsrv::BufferExchanger::write(char *dstBuf, int len) { memcpy(dstBuf, m_data, len); m_data += len; return len; } //================================================================================ template int t32bitsrv::RasterExchanger::read(const char *srcBuf, int len) { if (m_ras->getWrap() == m_ras->getLx()) { memcpy(m_pix, srcBuf, len); m_pix = (PIXEL *)((UCHAR *)m_pix + len); } else { int xStart = (m_pix - m_ras->pixels(0)) % m_ras->getWrap(); int remainingData = len; int lineData = m_ras->getLx() * sizeof(PIXEL); int lineDataToRead = std::min( (int)((m_ras->getLx() - xStart) * sizeof(PIXEL)), remainingData); for (; remainingData > 0; m_pix += (m_ras->getWrap() - xStart), remainingData -= lineDataToRead, lineDataToRead = std::min(lineData, remainingData), xStart = 0) memcpy(m_pix, srcBuf, lineDataToRead); } return len; } //-------------------------------------------------------------------------------- template int t32bitsrv::RasterExchanger::write(char *dstBuf, int len) { // We pass entire pixels, not just bytes len = len - (len % sizeof(PIXEL)); if (m_ras->getWrap() == m_ras->getLx()) { memcpy(dstBuf, m_pix, len); m_pix = (PIXEL *)((UCHAR *)m_pix + len); } else { int xStart = (m_pix - m_ras->pixels(0)) % m_ras->getWrap(); int remainingData = len; int lineData = m_ras->getLx() * sizeof(PIXEL); int lineDataToWrite = std::min( (int)((m_ras->getLx() - xStart) * sizeof(PIXEL)), remainingData); for (; remainingData > 0; m_pix += (m_ras->getWrap() - xStart), remainingData -= lineDataToWrite, lineDataToWrite = std::min(lineData, remainingData), xStart = 0) memcpy(dstBuf, m_pix, lineDataToWrite); } return len; } //-------------------------------------------------------------------------------- // Explicit specialization of raster exchangers template class DVAPI t32bitsrv::RasterExchanger; //================================================================================