Updates referencesource to .NET 4.7
[mono-project.git] / mcs / class / referencesource / System.Data / Microsoft / SqlServer / Server / SmiSettersStream.cs
blob95428f6d851d407da0d42fde830b5dacea7fe1ba
1 //------------------------------------------------------------------------------
2 // <copyright file="SmiSettersStream.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
4 // </copyright>
5 // <owner current="true" primary="true">Microsoft</owner>
6 // <owner current="true" primary="false">Microsoft</owner>
7 //------------------------------------------------------------------------------
9 namespace Microsoft.SqlServer.Server {
10 using System;
11 using System.Data.Common;
12 using System.Data.SqlClient;
13 using System.Diagnostics;
14 using System.IO;
16 internal class SmiSettersStream : Stream {
18 private SmiEventSink_Default _sink;
19 private ITypedSettersV3 _setters;
20 private int _ordinal;
21 private long _lengthWritten;
22 private SmiMetaData _metaData;
24 internal SmiSettersStream( SmiEventSink_Default sink, ITypedSettersV3 setters, int ordinal, SmiMetaData metaData ) {
25 Debug.Assert( null != sink );
26 Debug.Assert( null != setters );
27 Debug.Assert( 0 <= ordinal );
28 Debug.Assert( null != metaData );
30 _sink = sink;
31 _setters = setters;
32 _ordinal = ordinal;
33 _lengthWritten = 0;
34 _metaData = metaData;
37 public override bool CanRead {
38 get {
39 return false;
43 // If CanSeek is false, Position, Seek, Length, and SetLength should throw.
44 public override bool CanSeek {
45 get {
46 return false;
50 public override bool CanWrite {
51 get {
52 return true;
56 public override long Length {
57 get {
58 return _lengthWritten;
62 public override long Position {
63 get {
64 return _lengthWritten;
66 set {
67 throw SQL.StreamSeekNotSupported();
71 public override void Flush() {
72 _lengthWritten = ValueUtilsSmi.SetBytesLength(_sink, _setters, _ordinal, _metaData, _lengthWritten);
75 public override long Seek(long offset, SeekOrigin origin) {
76 throw SQL.StreamSeekNotSupported();
79 public override void SetLength(long value) {
80 if ( value < 0 ) {
81 throw ADP.ArgumentOutOfRange("value");
83 ValueUtilsSmi.SetBytesLength(_sink, _setters, _ordinal, _metaData, value);
86 public override int Read(byte[] buffer, int offset, int count) {
87 throw SQL.StreamReadNotSupported();
90 public override void Write(byte[] buffer, int offset, int count) {
91 _lengthWritten += ValueUtilsSmi.SetBytes(_sink, _setters, _ordinal, _metaData, _lengthWritten, buffer, offset, count);