bool Range::getItems(const TRangeID rangeID, BString &data) { AutoMutex autoSync(&_sync); RangeItemsHeader &header = *(RangeItemsHeader*)data.reserveBuffer(sizeof(RangeItemsHeader)); header.rangeID = rangeID; header.count = _items.size(); RangeItemEntry itemEntry; for (auto item = _items.begin(); item != _items.end(); item++) { itemEntry.itemKey = item->first; itemEntry.size = item->second.size; itemEntry.timeTag = item->second.timeTag; data.add((char*)&itemEntry, sizeof(itemEntry)); } return true; }
void Buffer::get(BString &value) { TSize size {0}; if ((_readPos + sizeof(size)) > _writePos) { throw Error("Read out of range"); } memcpy(&size, _readPos, sizeof(size)); _readPos += sizeof(size); if ((_readPos + size) > _writePos) { throw Error("Read out of range"); } value.clear(); value.add((char*)_readPos, size); _readPos += size; }