Example #1
0
 virtual unsigned getn(void *dst, unsigned n)
 {
     if (!compressed)
         return getBytes(dst, size*n)/size;
     byte *d = (byte *)dst;
     byte *e = d+(size*n);
     byte *p = (byte *)prev;
     unsigned ret = 0;
     while (d!=e) {
         if (first) {
             if (getBytes(d, size)!=size)
                 break;
             first = false;
         }
         else {
             if (remaining()<maxcompsize) 
                 refill();
             if (remaining()==0)
                 break;
             ptr += DiffExpand(ptr,d,p,size);
         }
         p = d;
         d += size;
         ret++;
     }
     if (ret)    // we got at least 1 so copy to prev
         memcpy(prev,e-size,size);
     return ret;
 }
Example #2
0
 size32_t diffExpand(byte const * src, RowBuffer const & prev)
 {
     if(isVar)
     {
         thisrowsize = *reinterpret_cast<size32_t const *>(src);
         unsigned maxrowsize;
         if(thisrowsize > prev.thisrowsize)
         {
             maxrowsize = thisrowsize;
             memset(prev.row + prev.thisrowsize, 0, thisrowsize - prev.thisrowsize);
         }
         else
             maxrowsize = prev.thisrowsize;
         return (sizeof(size32_t) + DiffExpand(src + sizeof(size32_t), buffer, prev.buffer, maxrowsize + sizeof(offset_t)));
     }
     else
     {
         return DiffExpand(src, buffer, prev.buffer, buffsize);
     }
 }