source: trunk/ab5.0/ablib/src/Classes/System/IO/StringReader.ab@ 662

Last change on this file since 662 was 662, checked in by イグトランス (egtra), 15 years ago

StreamReaderとStringReaderでEOF絡みの判定漏れを修正。

File size: 1.6 KB
Line 
1'Classes/System/IO/StringReader.ab
2
3Namespace System
4Namespace IO
5
6/*
7@brief Stringから読み込みを行うTextReaderの実装。
8@date 2008/02/26
9@auther Egtra
10*/
11Class StringReader
12 Inherits TextReader
13Public
14 /*
15 @brief コンストラクタ
16 @date 2008/02/26
17 @auther Egtra
18 @param str 読み取る基となる文字列。
19 @exception ArgumentNullException strがNothingのとき。
20 */
21 Sub StringReader(str As String)
22 If ActiveBasic.IsNothing(str) Then
23 Throw New ArgumentNullException("str")
24 End If
25 Dim length = GetStr(str, s)
26 If length > LONG_MAX Then
27 Throw New ArgumentException("Must be Length <= LONG_MAX", "str")
28 End If
29 len = length As Long
30 i = 0
31 End Sub
32
33 /*
34 @date 2008/02/26
35 @auther Egtra
36 */
37 Override Function Peek() As Long
38 If i >= len Then
39 Peek = -1
40 Else
41 Peek = s[i]
42 End If
43 End Function
44
45 /*
46 @date 2008/02/26
47 @auther Egtra
48 */
49 Override Function Read() As Long
50 Read = Peek()
51 i++
52 End Function
53
54 /*
55 @date 2008/02/26
56 @auther Egtra
57 */
58/*
59 Override Function ReadToEnd() As String
60 ReadToEnd = s.Substring(i)
61 i = s.Length
62 End Function
63*/
64Protected
65 /*
66 @date 2008/02/26
67 @auther Egtra
68 */
69 Override Sub Dispose(disposing As Boolean)
70 s = Nothing
71 i = 0
72 End Sub
73
74 /*
75 @date 2008/02/26
76 @auther Egtra
77 */
78 Override Function ReadImpl(buffer As *WCHAR, count As Long) As Long
79 ReadImpl = Math.Min(count, len - i)
80 ActiveBasic.Strings.ChrCopy(buffer, VarPtr(s[i]), ReadImpl As SIZE_T) 'ToDo: ポインタに対する+演算
81 End Function
82
83Private
84 s As *WCHAR
85 len As Long
86 i As Long
87End Class
88
89End Namespace
90End Namespace
Note: See TracBrowser for help on using the repository browser.