
NameSpace System
NameSpace IO

Class BinaryWriter
	Implements System.IDisposable

Public 'constructor
	/*
	ストリームへの書き込みを行う BinaryWriter クラスの新しいインスタンスを初期化します。
	*/
	Sub BinaryWriter()
		This.OutStream=Nothing
	End Sub

	/*
	ストリームへの書き込みを行う BinaryWriter クラスの新しいインスタンスを初期化します。
	*/
	Sub BinaryWriter(output As System.IO.Stream)
		This.OutStream=output
	End Sub

	/*
	ストリームへの書き込みを行う BinaryWriter クラスの新しいインスタンスを初期化します。
	*/
	Sub BinaryWriter(output As System.IO.Stream, encoding As System.Text.Encoding)
		This.OutStream=output
		This.Enc = encoding
	End Sub

	Sub ~BinaryWriter()
		This.Dispose()
	End Sub

Public 'field
	/*
	バッキング ストアを持たない BinaryWriter を指定します。
	*/
/*	Null As BinaryWriter*/

Protected 'field
	/*
	基になるストリームを保持します。
	*/
	OutStream As System.IO.Stream

Public 'property
	/*
	BinaryWriter の基になるストリームを取得します。
	*/
	Function BaseStream() As Stream
		Return OutStream
	End Function

Public 'method
	/*
	現在の BinaryWriter と基になるストリームを閉じます。
	*/
	Sub Close()
		This.Dispose(True)
	End Sub

	/*
	現在のライタのすべてのバッファをクリアし、バッファ内のデータを基になるデバイスに書き込みます。
	*/
	Sub Flush()
	End Sub

	/*
	現在のストリーム内の位置を設定します。
	*/
	Function Seek(offset As Long, origin As SeekOrigin) As Int64
		This.OutStream.Seek(offset, origin)
	End Function


	/*
		現在のストリームに1バイトBoolean値を書き込みます。値0はFalseを表し、値1はTrueを表します。
	*/
	Sub Write(value As Boolean)
		This.OutStream.Write( VarPtr(value) As *Byte, 0, SizeOf(Boolean))
	End Sub
 
	/*
		現在のストリームに符号なしバイトを書き込み、ストリームの位置を1バイトだけ進めます。
	*/
	Sub WriteByte(value As Byte)
		This.OutStream.Write( VarPtr(value) As *Byte, 0, SizeOf(Byte))
	End Sub
 
	/*
		基になるストリームにバイト配列を書き込みます。
	*/
/*	Sub Write(value As Array<Byte>)
		TODO
	End Sub*/
 
	/*
		現在のストリームにUnicode 文字を書き込み、使用した Encoding とストリームに書き込んだ特定の文字に従ってストリームの現在位置を進めます。
	*/
	Sub Write(value As Char)
		This.OutStream.Write( VarPtr(value) As *Byte, 0, SizeOf(Char))
	End Sub
 
	/*
		現在のストリームに文字配列を書き込み、使用した Encoding とストリームに書き込んだ特定の文字に従ってストリームの現在位置を進めます。
	*/
/*	Sub Write(value As Array<Char>)
		TODO
	End Sub*/
 
	/*
		現在のストリームに10進数値を書き込み、ストリームの位置を16バイトだけ進めます。 
	*/
/*	Sub Write(value As Decimal)
		TODO
	End Sub*/

	/*
		現在のストリームに8バイト浮動小数点値を書き込み、ストリームの位置を 8バイトだけ進めます。
	*/
	Sub Write(value As Double)
		This.OutStream.Write( VarPtr(value) As *Byte, 0, SizeOf(Double))
	End Sub
 
	/*
		現在のストリームに2バイト符号付き整数を書き込み、ストリームの位置を 2バイトだけ進めます。
	*/
	Sub Write(value As Integer)
		This.OutStream.Write( VarPtr(value) As *Byte, 0, SizeOf(Integer))
	End Sub
 
	/*
		現在のストリームに4バイト符号付き整数を書き込み、ストリームの位置を 4バイトだけ進めます。
	*/
	Sub Write(value As Long)
		This.OutStream.Write( VarPtr(value) As *Byte, 0, SizeOf(Long))
	End Sub
 
	/*
		現在のストリームに8バイト符号付き整数を書き込み、ストリームの位置を 8バイトだけ進めます。
	*/
	Sub Write(value As Int64)
		This.OutStream.Write( VarPtr(value) As *Byte, 0, SizeOf(Int64))
	End Sub
 
	/*
		現在のストリームに符号付きバイトを書き込み、ストリームの位置を1バイトだけ進めます。
	*/
	Sub WriteSByte(value As SByte)
		This.OutStream.Write( VarPtr(value) As *Byte, 0, SizeOf(SByte))
	End Sub
 
	/*
		現在のストリームに4バイト浮動小数点値を書き込み、ストリームの位置を 4バイトだけ進めます。
	*/
	Sub Write(value As Single)
		This.OutStream.Write( VarPtr(value) As *Byte, 0, SizeOf(Single))
	End Sub
 
	/*
		文字長プリフィックスを持つ文字列を、BinaryWriter の現在のエンコーディングでこのストリームに書き込み、使用したエンコーディングとストリームに書き込んだ特定の文字に従ってストリームの現在位置を進めます。
	*/
	Sub Write(value As String)
		This.OutStream.Write( ToTCStr(value) As *Byte, 0, value.Length()*SizeOf(TCHAR))
	End Sub
#ifndef UNICODE
	/*
		現在のストリームに2バイト符号なし整数を書き込み、ストリームの位置を 2バイトだけ進めます。
	*/
	Sub Write(value As Word)
		This.OutStream.Write( VarPtr(value) As *Byte, 0, SizeOf(Word))
	End Sub
#endif
	/*
		現在のストリームに4バイト符号なし整数を書き込み、ストリームの位置を 4バイトだけ進めます。
	*/
	Sub Write(value As DWord)
		This.OutStream.Write( VarPtr(value) As *Byte, 0, SizeOf(DWord))
	End Sub
 
	/*
		現在のストリームに8バイト符号なし整数を書き込み、ストリームの位置を 8バイトだけ進めます。
	*/
	Sub Write(value As QWord)
		This.OutStream.Write( VarPtr(value) As *Byte, 0, SizeOf(QWord))
	End Sub
 
	/*
		現在のストリームにバイト配列の特定の領域を書き込みます。
	*/
	Sub Write(buffer As *Byte, index As Long, count As Long)
		This.OutStream.Write( VarPtr(buffer[index]) As *Byte, 0, count)
	End Sub
 
	/*
		現在のストリームに文字配列の特定の領域を書き込み、使用した Encoding とストリームに書き込んだ特定の文字に従ってストリームの現在位置を進めます。
	*/
/*	Sub Write(chars As *Char, index As Long, count As Long)
	End Sub*/

	/*
	32 ビット整数を圧縮形式で書き込みます。
	*/
/*	Sub Write7BitEncodedInt()
	End Sub*/

	/*
	BinaryWriter によって使用されているアンマネージ リソースを解放し、オプションでマネージ リソースも解放します。
	*/

Protected
	Virtual Sub Dispose(disposing As Boolean)
		This.OutStream.Close()
	End Sub

Private
	Enc As System.Text.Encoding
End Class

End Namespace
End Namespace
