}
}
+void EncodeBlobJournal(const BlobJournalType& journal, std::string* into) {
+ BlobJournalType::const_iterator iter;
+ for (iter = journal.begin(); iter != journal.end(); ++iter) {
+ EncodeVarInt(iter->first, into);
+ EncodeVarInt(iter->second, into);
+ }
+}
+
bool DecodeByte(StringPiece* slice, unsigned char* value) {
if (slice->empty())
return false;
return false;
}
+bool DecodeBlobJournal(StringPiece* slice, BlobJournalType* journal) {
+ BlobJournalType output;
+ while (!slice->empty()) {
+ int64 database_id = -1;
+ int64 blob_key = -1;
+ if (!DecodeVarInt(slice, &database_id))
+ return false;
+ if (!KeyPrefix::IsValidDatabaseId(database_id))
+ return false;
+ if (!DecodeVarInt(slice, &blob_key))
+ return false;
+ if (!DatabaseMetaDataKey::IsValidBlobKey(blob_key) &&
+ (blob_key != DatabaseMetaDataKey::kAllBlobsKey)) {
+ return false;
+ }
+ output.push_back(std::make_pair(database_id, blob_key));
+ }
+ journal->swap(output);
+ return true;
+}
+
bool ConsumeEncodedIDBKey(StringPiece* slice) {
unsigned char type = (*slice)[0];
slice->remove_prefix(1);