size32_t CThorContiguousRowBuffer::sizeVStr() { size32_t nextOffset = readOffset; for (;;) { ensureAccessible(nextOffset+1); for (; nextOffset < maxOffset; nextOffset++) { if (buffer[nextOffset] == 0) return (nextOffset + 1) - readOffset; } } }
size32_t CThorContiguousRowBuffer::sizeVUni() { size32_t nextOffset = readOffset; const size32_t sizeOfUChar = 2; for (;;) { ensureAccessible(nextOffset+sizeOfUChar); for (; nextOffset+1 < maxOffset; nextOffset += sizeOfUChar) { if (buffer[nextOffset] == 0 && buffer[nextOffset+1] == 0) return (nextOffset + sizeOfUChar) - readOffset; } } }
size32_t CThorContiguousRowBuffer::sizeUtf8(size32_t len) { if (len == 0) return 0; //The len is the number of utf characters, size depends on which characters are included. size32_t nextOffset = readOffset; while (len) { ensureAccessible(nextOffset+1); for (;nextOffset < maxOffset;) { nextOffset += readUtf8Size(buffer+nextOffset); // This function only accesses the first byte if (--len == 0) break; } } return nextOffset - readOffset; }
void CThorContiguousRowBuffer::doRead(size32_t len, void * ptr) { ensureAccessible(readOffset + len); memcpy(ptr, cur+readOffset, len); readOffset += len; }
void CThorContiguousRowBuffer::skipVUni() { size32_t size = sizeVUni(); ensureAccessible(readOffset+size); readOffset += size; }
void CThorContiguousRowBuffer::skipUtf8(size32_t len) { size32_t size = sizeUtf8(len); ensureAccessible(readOffset+size); readOffset += size; }
void CThorContiguousRowBuffer::skip(size32_t size) { ensureAccessible(readOffset+size); readOffset += size; }
size32_t CThorContiguousRowBuffer::sizePackedInt() { ensureAccessible(readOffset+1); return rtlGetPackedSizeFromFirst(cur[readOffset]); }