summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage/key_string.h
diff options
context:
space:
mode:
authorLouis Williams <louis.williams@mongodb.com>2019-08-29 19:13:50 +0000
committerevergreen <evergreen@mongodb.com>2019-08-29 19:13:50 +0000
commitc33abedcb7bd3a4c116e350d70be29f3fd4acd45 (patch)
tree7bf691d53c8ff842e855c6b3c7a2d3ea2e1c6bc5 /src/mongo/db/storage/key_string.h
parenta3014fa23e0123c3ac42b4d8e295c4f93600c685 (diff)
downloadmongo-c33abedcb7bd3a4c116e350d70be29f3fd4acd45.tar.gz
SERVER-42526 IndexBuildInterceptor should store KeyString keys
Diffstat (limited to 'src/mongo/db/storage/key_string.h')
-rw-r--r--src/mongo/db/storage/key_string.h37
1 files changed, 24 insertions, 13 deletions
diff --git a/src/mongo/db/storage/key_string.h b/src/mongo/db/storage/key_string.h
index 404f4d9a30c..74fd5fd4d91 100644
--- a/src/mongo/db/storage/key_string.h
+++ b/src/mongo/db/storage/key_string.h
@@ -347,32 +347,43 @@ public:
*/
std::string toString() const;
- /// Members for Sorter
- struct SorterDeserializeSettings {
- SorterDeserializeSettings(Version version) : keyStringVersion(version) {}
- Version keyStringVersion;
- };
-
- void serializeForSorter(BufBuilder& buf) const {
- buf.appendNum(_ksSize); // Serialize size of Keystring
- buf.appendBuf(_buffer.get(), _ksSize); // Serialize Keystring
- buf.appendBuf(_buffer.get() + _ksSize, _bufSize - _ksSize); // Serialize Typebits
+ // Serializes this Value into a storable format with TypeBits information. The serialized
+ // format takes the following form:
+ // [keystring size][keystring encoding][typebits encoding]
+ void serialize(BufBuilder& buf) const {
+ buf.appendNum(_ksSize); // Serialize size of Keystring
+ buf.appendBuf(_buffer.get(), _bufSize); // Serialize Keystring + Typebits
}
- static Value deserializeForSorter(BufReader& buf, const SorterDeserializeSettings& settings) {
+ // Deserialize the Value from a serialized format.
+ static Value deserialize(BufReader& buf, KeyString::Version version) {
const int32_t sizeOfKeystring = buf.read<LittleEndian<int32_t>>();
const void* keystringPtr = buf.skip(sizeOfKeystring);
BufBuilder newBuf;
newBuf.appendBuf(keystringPtr, sizeOfKeystring);
- auto typeBits = TypeBits::fromBuffer(settings.keyStringVersion, &buf); // advances the buf
+ auto typeBits = TypeBits::fromBuffer(version, &buf); // advances the buf
if (typeBits.isAllZeros()) {
newBuf.appendChar(0);
} else {
newBuf.appendBuf(typeBits.getBuffer(), typeBits.getSize());
}
- return {settings.keyStringVersion, sizeOfKeystring, newBuf.len(), newBuf.release()};
+ return {version, sizeOfKeystring, newBuf.len(), newBuf.release()};
+ }
+
+ /// Members for Sorter
+ struct SorterDeserializeSettings {
+ SorterDeserializeSettings(Version version) : keyStringVersion(version) {}
+ Version keyStringVersion;
+ };
+
+ void serializeForSorter(BufBuilder& buf) const {
+ serialize(buf);
+ }
+
+ static Value deserializeForSorter(BufReader& buf, const SorterDeserializeSettings& settings) {
+ return deserialize(buf, settings.keyStringVersion);
}
int memUsageForSorter() const {