// private methods private void ChangeMoreToComeFromTrueToFalse() { var flagsPosition = _messageStartPosition + 16; _stream.Position = flagsPosition; var flags = (OpMsgFlags)_stream.ReadInt32(); if ((flags & OpMsgFlags.MoreToCome) == 0) { throw new InvalidOperationException("MoreToCome was not true."); } flags = flags & ~OpMsgFlags.MoreToCome; _stream.Position = flagsPosition; _stream.WriteInt32((int)flags); }
private void CopyType1Section(BsonStream inputStream, BsonStream outputStream) { var payloadType = (PayloadType)inputStream.ReadByte(); if (payloadType != PayloadType.Type1) { throw new FormatException("Expected subsequent sections to be of type 1."); } var sectionStartPosition = inputStream.Position; var sectionSize = inputStream.ReadInt32(); var sectionEndPosition = sectionStartPosition + sectionSize; var identifier = inputStream.ReadCString(Utf8Encodings.Lenient); outputStream.WriteByte((byte)BsonType.Array); outputStream.WriteCString(identifier); var arrayStartPosition = outputStream.Position; outputStream.WriteInt32(0); // array length will be backpatched var index = 0; while (inputStream.Position < sectionEndPosition) { outputStream.WriteByte((byte)BsonType.Document); outputStream.WriteCString(index.ToString()); CopyBsonDocument(inputStream, outputStream); index++; } outputStream.WriteByte(0); outputStream.BackpatchSize(arrayStartPosition); }
// private methods private void ChangeWFrom0To1() { var wPosition = FindWPosition(); _stream.Position = wPosition; var w = _stream.ReadInt32(); if (w != 0) { throw new InvalidOperationException("w was not 0."); } _stream.Position = wPosition; _stream.WriteInt32(1); }