DCL 4.0
Loading...
Searching...
No Matches
StringReader.cpp
Go to the documentation of this file.
1#include <string.h> // memcpy
2#include <dcl/StringReader.h>
3#include <dcl/size_t.h>
4
5#if __DCL_DEBUG
6#undef __THIS_FILE__
7static const char_t __THIS_FILE__[] = __T("dcl/StringReader.cpp");
8#endif
9
10__DCL_BEGIN_NAMESPACE
11
13
14String StringReader::toString() const
15{
16 StringBuilder r = className();
17 r.format(__T("(%uwchars)"), __str.length());
18 return r;
19}
20
21StringReader::StringReader(const String& _str)
22{
23 __str = _str;
24 __begin = _str;
25 __end = __begin + _str.length();
26 __endLine = false;
27}
28
29size_t StringReader::read(wchar_t* _buf, size_t _n)
31{
32 __DCL_ASSERT_PARAM(_buf != NULL);
33
34 if (__endLine)
35 {
36 __endLine = false;
37 // 이전에 CR 또는 LF 직전까지 읽었다. CRLF를 건너뛴다.
38 // 이전의 CL, LF 또는 CRLF는 이전에 읽은 것이다.
39 if (*__begin == L'\r')
40 __begin++;
41 if (*__begin == L'\n')
42 __begin ++;
43 }
44
45 size_t n = 0;
46 if (__begin < __end)
47 {
48 n = __MIN(__end - __begin, _n);
49 memcpy(_buf, __begin, n * sizeof(wchar_t));
50 __begin += n;
51 }
52
53 return n;
54}
55
56bool StringReader::readLine(String& _buf)
58{
59 if (__endLine)
60 {
61 __endLine = false;
62 // 이전에 CR 또는 LF 직전까지 읽었다. CRLF를 건너뛴다.
63 // 이전의 CL, LF 또는 CRLF는 이전에 읽은 것이다.
64 if (*__begin == L'\r')
65 __begin++;
66 if (*__begin == L'\n')
67 __begin++;
68 }
69
70 if (__begin < __end)
71 {
72 const wchar_t* cur = __begin;
73 for ( ; cur < __end; cur++)
74 {
75 if (*cur == L'\r' || *cur == L'\n')
76 {
77 __endLine = true;
78 break;
79 }
80 }
81 _buf.assign(__begin, cur - __begin);
82 __begin = cur;
83 return true;
84 }
85 return false;
86}
87
88__DCL_END_NAMESPACE
#define __THIS_FILE__
Definition _trace.h:14
#define NULL
Definition Config.h:340
wchar_t char_t
Definition Config.h:275
#define __DCL_THROWS1(e)
Definition Config.h:167
#define __DCL_ASSERT_PARAM(expr)
Definition Object.h:384
#define IMPLEMENT_CLASSINFO(class_name, base_class_name)
Definition Object.h:228
#define __T(str)
Definition Object.h:44
ByteString r
void CharsetConvertException *size_t n
Definition SQLField.cpp:253
virtual String toString() const
Definition Object.cpp:187
String className() const
Definition Object.cpp:163
size_t __MIN(size_t x, size_t y)
Definition size_t.h:27