'Classes/System/IO/StringReader.ab Namespace System Namespace IO /* @brief Stringから読み込みを行うTextReaderの実装。 @date 2008/02/26 @auther Egtra */ Class StringReader Inherits TextReader Public /* @brief コンストラクタ @date 2008/02/26 @auther Egtra @param str 読み取る基となる文字列。 @exception ArgumentNullException strがNothingのとき。 */ Sub StringReader(str As String) If ActiveBasic.IsNothing(str) Then Throw New ArgumentNullException("str") End If Dim length = GetStr(str, s) If length > LONG_MAX Then Throw New ArgumentException("Must be Length <= LONG_MAX", "str") End If len = length As Long i = 0 End Sub /* @date 2008/02/26 @auther Egtra */ Override Function Peek() As Long If i >= len Then Peek = -1 Else Peek = s[i] End If End Function /* @date 2008/02/26 @auther Egtra */ Override Function Read() As Long Read = Peek() i++ End Function /* @date 2008/02/26 @auther Egtra */ /* Override Function ReadToEnd() As String ReadToEnd = s.Substring(i) i = s.Length End Function */ Protected /* @date 2008/02/26 @auther Egtra */ Override Sub Dispose(disposing As Boolean) s = Nothing i = 0 End Sub /* @date 2008/02/26 @auther Egtra */ Override Function ReadImpl(buffer As *WCHAR, count As Long) As Long ReadImpl = Math.Min(count, len - i) ActiveBasic.Strings.ChrCopy(buffer, VarPtr(s[i]), ReadImpl As SIZE_T) 'ToDo: ポインタに対する+演算 End Function Private s As *WCHAR len As Long i As Long End Class End Namespace End Namespace