 |
Changeset 1951
- Timestamp:
- 03/22/07 04:03:11
(2 years ago)
- Author:
- kris
- Message:
optimized nextLine() for jollies
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r1950 |
r1951 |
|
| 19 | 19 | private import tango.io.Buffer, |
|---|
| 20 | 20 | tango.io.DeviceConduit; |
|---|
| | 21 | |
|---|
| | 22 | |
|---|
| | 23 | version (Opt) |
|---|
| | 24 | { |
|---|
| | 25 | private uint indexOf (void* str, char match, uint length) |
|---|
| | 26 | { |
|---|
| | 27 | version (D_InlineAsm_X86) |
|---|
| | 28 | { |
|---|
| | 29 | asm { |
|---|
| | 30 | mov EDI, str; |
|---|
| | 31 | mov ECX, length; |
|---|
| | 32 | movzx EAX, match; |
|---|
| | 33 | mov ESI, ECX; |
|---|
| | 34 | and ESI, ESI; |
|---|
| | 35 | jz end; |
|---|
| | 36 | |
|---|
| | 37 | cld; |
|---|
| | 38 | repnz; |
|---|
| | 39 | scasb; |
|---|
| | 40 | jnz end; |
|---|
| | 41 | sub ESI, ECX; |
|---|
| | 42 | dec ESI; |
|---|
| | 43 | end:; |
|---|
| | 44 | mov EAX, ESI; |
|---|
| | 45 | } |
|---|
| | 46 | } |
|---|
| | 47 | else |
|---|
| | 48 | { |
|---|
| | 49 | auto len = length; |
|---|
| | 50 | for (auto p=str-1; len--;) |
|---|
| | 51 | if (*++p is match) |
|---|
| | 52 | return p - str; |
|---|
| | 53 | return length; |
|---|
| | 54 | } |
|---|
| | 55 | } |
|---|
| | 56 | } |
|---|
| 21 | 57 | |
|---|
| 22 | 58 | /******************************************************************************* |
|---|
| … | … | |
| 115 | 151 | bool nextLine (inout char[] content, bool raw=false) |
|---|
| 116 | 152 | { |
|---|
| | 153 | version (Opt) |
|---|
| | 154 | { |
|---|
| | 155 | uint scan (void[] input) |
|---|
| | 156 | { |
|---|
| | 157 | auto i = indexOf (input.ptr, '\n', input.length); |
|---|
| | 158 | if (i < input.length) |
|---|
| | 159 | { |
|---|
| | 160 | ++i; |
|---|
| | 161 | content = cast(char[])cast(void*) input [0..i]; |
|---|
| | 162 | return i; |
|---|
| | 163 | } |
|---|
| | 164 | content = cast(char[])cast(void*) input; |
|---|
| | 165 | return IConduit.Eof; |
|---|
| | 166 | } |
|---|
| | 167 | } |
|---|
| | 168 | else |
|---|
| | 169 | { |
|---|
| 117 | 170 | uint scan (void[] input) |
|---|
| 118 | 171 | { |
|---|
| … | … | |
| 133 | 186 | return IConduit.Eof; |
|---|
| 134 | 187 | } |
|---|
| | 188 | } |
|---|
| 135 | 189 | |
|---|
| 136 | 190 | return buffer_.next (&scan) || content.length; |
|---|
| … | … | |
| 318 | 372 | |
|---|
| 319 | 373 | *******************************************************/ |
|---|
| 320 | | |
|---|
| | 374 | /+ |
|---|
| 321 | 375 | uint bufferSize () |
|---|
| 322 | 376 | { |
|---|
| 323 | 377 | return 1024 * 8; |
|---|
| 324 | 378 | } |
|---|
| 325 | | |
|---|
| | 379 | +/ |
|---|
| 326 | 380 | /******************************************************* |
|---|
| 327 | 381 | |
|---|
Download in other formats:
|
 |
 |
|
 |
Copyright © 2006-2008 Tango. All Rights Reserved. | Page Width:
Static or
Dynamic