Namespace System
Namespace IO


Class Stream
	Inherits System.IDisposable

Public 'Protected
	Sub Stream():	End Sub
Public
	Virtual Sub ~Stream()
		This.Close()
	End Sub
Public
	Abstract Function CanRead() As Boolean
	Abstract Function CanSeek() As Boolean

	Virtual Function CanTimeout() As Boolean
		Return True
	End Function

	Abstract Function CanWrite() As Boolean
	Abstract Function Length() As Int64
	Abstract Sub Position(value As Int64)
	Abstract Function Position() As Int64

	Virtual Sub ReadTimeout(value As Long)
		' Throw InvalidOperationException
	End Sub

	Virtual Function ReadTimeout() As Long
		' Throw InvalidOperationException
	End Function

	Virtual Sub WriteTimeout(value As Long)
		' Throw InvalidOperationException
	End Sub

	Virtual Function WriteTimeout() As Long
		' Throw InvalidOperationException
	End Function

Public
	Virtual Function BeginRead(buffer As *Byte, offset As Long, count As Long, callback As AsyncCallback, state As Object) As System.IAsyncResult
		Read(buffer,offset,count)
	End Function
	Virtual Function BeginWrite(buffer As *Byte, offset As Long, count As Long, callback As AsyncCallback, state As Object) As System.IAsyncResult
		Write(buffer,offset,count)
	End Function
	Virtual Sub Close()
		This.Dispose()
	End Sub
	Virtual Function EndRead(ByRef asyncResult As System.IAsyncResult) As Long:	End Function
	Virtual Sub EndWrite(ByRef asyncResult As System.IAsyncResult):	End Sub
	Abstract Sub Flush()
	Abstract Function Read(buffer As *Byte, offset As Long, count As Long) As Long

	Virtual Function ReadByte() As Long
		Dim b As Byte
		Dim ret = Read(VarPtr(b), 0, 1)
		If ret <> 0 Then
			Return b
		Else
			Return -1
		End If
	End Function

	Abstract Function Seek(offset As Int64, origin As SeekOrigin) As Long
	Abstract Sub SetLength(value As Int64)
	Abstract Sub Write(buffer As *Byte, offset As Long, count As Long)

	Virtual Sub WriteByte(b As Byte)
		Write(VarPtr(b), 0, 1)
	End Sub
Protected
	Virtual Function CreateWaitHandle() As System.Threading.WaitHandle:	End Function
End Class


End Namespace
End Namespace
