Beispiel #1
0
 size_t Read(void * dst, size_t len) override
 {
     size_t bytesRead = 0;
     size_t bytesToRead = len;
     while (bytesToRead > 0 && !_done)
     {
         size_t readLen = _source->Read(dst, _offset, bytesToRead);
         if (readLen > 0)
         {
             dst = (void *)((uintptr_t)dst + readLen);
             bytesToRead -= readLen;
             bytesRead += readLen;
             _offset += readLen;
         }
         if (_offset >= _source->GetLength())
         {
             if (_loop == 0)
             {
                 _done = true;
             }
             else if (_loop == MIXER_LOOP_INFINITE)
             {
                 _offset = 0;
             }
             else
             {
                 _loop--;
                 _offset = 0;
             }
         }
     }
     return bytesRead;
 }