void NetworkDataTaskBlob::readData(const BlobDataItem& item) { ASSERT(item.data().data()); long long bytesToRead = item.length() - m_currentItemReadSize; if (bytesToRead > m_totalRemainingSize) bytesToRead = m_totalRemainingSize; consumeData(reinterpret_cast<const char*>(item.data().data()->data()) + item.offset() + m_currentItemReadSize, static_cast<int>(bytesToRead)); m_currentItemReadSize = 0; }
void BlobResourceHandle::readDataAsync(const BlobDataItem& item) { ASSERT(isMainThread()); ASSERT(m_async); ASSERT(item.data().data()); Ref<BlobResourceHandle> protectedThis(*this); long long bytesToRead = item.length() - m_currentItemReadSize; if (bytesToRead > m_totalRemainingSize) bytesToRead = m_totalRemainingSize; consumeData(reinterpret_cast<const char*>(item.data().data()->data()) + item.offset() + m_currentItemReadSize, static_cast<int>(bytesToRead)); m_currentItemReadSize = 0; }
int BlobResourceHandle::readDataSync(const BlobDataItem& item, char* buf, int length) { ASSERT(isMainThread()); ASSERT(!m_async); long long remaining = item.length() - m_currentItemReadSize; int bytesToRead = (length > remaining) ? static_cast<int>(remaining) : length; if (bytesToRead > m_totalRemainingSize) bytesToRead = static_cast<int>(m_totalRemainingSize); memcpy(buf, item.data().data() + item.offset() + m_currentItemReadSize, bytesToRead); m_totalRemainingSize -= bytesToRead; m_currentItemReadSize += bytesToRead; if (m_currentItemReadSize == item.length()) { m_readItemCount++; m_currentItemReadSize = 0; } return bytesToRead; }