internal BsonBinaryWriterContext( BsonBinaryWriterContext parentContext, BsonWriteState writeState ) { this.parentContext = parentContext; this.writeState = writeState; }
public BsonBinaryWriter( Stream stream, BsonBuffer buffer, BsonBinaryWriterSettings settings ) { this.stream = stream; this.buffer = buffer ?? new BsonBuffer(); this.disposeBuffer = buffer == null; // only call Dispose if we allocated the buffer this.settings = settings; context = new BsonBinaryWriterContext(null, BsonWriteState.Initial); }
public override void Close() { // Close can be called on Disposed objects if (context.WriteState != BsonWriteState.Closed) { if (context.WriteState == BsonWriteState.Done) { Flush(); } if (stream != null && settings.CloseOutput) { stream.Close(); } context = new BsonBinaryWriterContext(null, BsonWriteState.Closed); } }
public override void WriteArrayName( string name ) { if (disposed) { throw new ObjectDisposedException("BsonBinaryWriter"); } if ((context.WriteState & BsonWriteState.Document) == 0) { throw new InvalidOperationException("WriteStartArray can only be called when WriteState is one of the document states"); } buffer.WriteByte((byte) BsonType.Array); buffer.WriteCString(name); context = new BsonBinaryWriterContext(context, BsonWriteState.Array); context = new BsonBinaryWriterContext(context, BsonWriteState.StartDocument); }
public override void WriteStartDocument() { if (disposed) { throw new ObjectDisposedException("BsonBinaryWriter"); } if (context.WriteState == BsonWriteState.StartDocument) { context = context.ParentContext; } else if (context.WriteState == BsonWriteState.Initial || context.WriteState == BsonWriteState.Done) { context = new BsonBinaryWriterContext(context, BsonWriteState.Document); } else { throw new InvalidOperationException("WriteStartDocument can only be called when WriteState is Initial, StartDocument, or Done"); } context.StartPosition = buffer.Position; buffer.WriteInt32(0); // reserve space for size }
public override void WriteJavaScriptWithScope( string name, string code ) { if (disposed) { throw new ObjectDisposedException("BsonBinaryWriter"); } if ((context.WriteState & BsonWriteState.Document) == 0) { throw new InvalidOperationException("WriteStartJavaScriptWithScope can only be called when WriteState is one of the document states"); } buffer.WriteByte((byte) BsonType.JavaScriptWithScope); buffer.WriteCString(name); context = new BsonBinaryWriterContext(context, BsonWriteState.JavaScriptWithScope); context.StartPosition = buffer.Position; buffer.WriteInt32(0); // reserve space for size of JavaScript with scope value buffer.WriteString(code); context = new BsonBinaryWriterContext(context, BsonWriteState.ScopeDocument); context = new BsonBinaryWriterContext(context, BsonWriteState.StartDocument); }
public override void WriteEndDocument() { if (disposed) { throw new ObjectDisposedException("BsonBinaryWriter"); } if ((context.WriteState & BsonWriteState.Document) == 0) { throw new InvalidOperationException("WriteEndDocument can only be called when WriteState is one of the document states"); } buffer.WriteByte(0); BackpatchSize(); // size of document context = context.ParentContext; if (context.WriteState == BsonWriteState.JavaScriptWithScope) { BackpatchSize(); // size of the JavaScript with scope value context = context.ParentContext; } if (context.WriteState == BsonWriteState.Initial) { context = new BsonBinaryWriterContext(null, BsonWriteState.Done); } }