PIpcMessage::PIpcMessage(uint32_t capacity) : Pickle(capacity), header_(0) { if (capacity >= sizeof(Header)) { header_ = reinterpret_cast<Header*>(payload()); if (header_) { header_->routing = header_->id = header_->type = header_->flags = 0; updateIter(sizeof(Header)); } } }
uint64_t RowStoreScanProcessor::processUpdateRecord(const UpdateLogEntry* ptr, uint64_t baseVersion, uint64_t& validTo) { UpdateRecordIterator updateIter(ptr, baseVersion); for (; !updateIter.done(); updateIter.next()) { auto entry = LogEntry::entryFromData(reinterpret_cast<const char*>(updateIter.value())); // Check if the entry marks a deletion: Skip element if (entry->type() == crossbow::to_underlying(RecordType::DELETE)) { validTo = updateIter->version; continue; } processRowRecord(updateIter->key, updateIter->version, validTo, updateIter->data(), entry->size() - sizeof(UpdateLogEntry)); validTo = updateIter->version; } return updateIter.lowestVersion(); }
PIpcMessage::PIpcMessage(int32_t routing_id, uint16_t type, uint32_t payload_size) : Pickle(sizeof(Header) + payload_size) { header_ = reinterpret_cast<Header*>(payload()); if (header_) { header_->routing = routing_id; header_->type = type; header_->flags = 0; pthread_mutex_lock(&s_nextMessageIdMutex); s_nextMessageId++; // Avoid wraparound if (s_nextMessageId < 0) s_nextMessageId = 1; header_->id = s_nextMessageId; pthread_mutex_unlock(&s_nextMessageIdMutex); updateIter(sizeof(Header)); } }