Mercurial > projects > dwt2
comparison java/src/java/lang/StringBuffer.d @ 21:9b96950f2c3c
the 'java' tree compiles on both D1-Tango and D2-Phobos
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Thu, 19 Mar 2009 20:38:55 +0100 |
parents | dbfb303e8fb0 |
children | f713da8bc051 |
comparison
equal
deleted
inserted
replaced
20:dccb717aa902 | 21:9b96950f2c3c |
---|---|
1 module java.lang.StringBuffer; | 1 module java.lang.StringBuffer; |
2 | 2 |
3 import java.lang.util; | 3 import java.lang.util; |
4 | 4 |
5 static import tango.text.Text; | 5 version(Tango){ |
6 static import tango.text.convert.Utf; | 6 static import tango.text.Text; |
7 static import tango.text.convert.Utf; | |
8 } else { // Phobos | |
9 static import std.uni; | |
10 static import std.utf; | |
11 } | |
7 | 12 |
8 class StringBuffer : CharSequence { | 13 class StringBuffer : CharSequence { |
9 alias tango.text.Text.Text!(char) TBuf; | 14 version(Tango){ |
10 TBuf buf; | 15 alias tango.text.Text.Text!(char) TBuf; |
16 TBuf buf; | |
17 } else { // Phobos | |
18 const int STDINCR = 128; | |
19 char[] buf; | |
20 int used; | |
21 } | |
11 | 22 |
12 public this(){ | 23 public this(){ |
13 buf = new TBuf(); | 24 version(Tango){ |
25 buf = new TBuf(); | |
26 } else { // Phobos | |
27 } | |
14 } | 28 } |
15 | 29 |
16 public this( int cap ){ | 30 public this( int cap ){ |
17 buf = new TBuf( cap ); | 31 version(Tango){ |
32 buf = new TBuf(cap); | |
33 } else { // Phobos | |
34 buf.length = cap; | |
35 } | |
18 } | 36 } |
19 | 37 |
20 public this( String content ){ | 38 public this( String content ){ |
21 buf = new TBuf( content ); | 39 version(Tango){ |
40 buf = new TBuf( content ); | |
41 } else { // Phobos | |
42 buf.length = content.length + STDINCR; | |
43 buf[ 0 .. content.length ] = content; | |
44 used = content.length; | |
45 } | |
22 } | 46 } |
23 | 47 |
24 char charAt(int index){ | 48 char charAt(int index){ |
25 return buf.slice()[ index ]; | 49 version(Tango){ |
50 return buf.slice()[ index ]; | |
51 } else { // Phobos | |
52 return buf[ index ]; | |
53 } | |
26 } | 54 } |
27 | 55 |
28 int length(){ | 56 int length(){ |
29 return buf.length(); | 57 version(Tango){ |
58 return buf.length(); | |
59 } else { // Phobos | |
60 return used; | |
61 } | |
30 } | 62 } |
31 | 63 |
32 CharSequence subSequence(int start, int end){ | 64 CharSequence subSequence(int start, int end){ |
33 return new StringBuffer( buf.slice()[ start .. end ] ); | 65 version(Tango){ |
66 return new StringBuffer( buf.slice()[ start .. end ] ); | |
67 } else { // Phobos | |
68 return new StringBuffer( cast(String)buf[ start .. end ] ); | |
69 } | |
34 } | 70 } |
35 | 71 |
36 String toString(){ | 72 String toString(){ |
37 return buf.slice(); | 73 version(Tango){ |
74 return buf.slice(); | |
75 } else { // Phobos | |
76 return cast(String)buf[ 0 .. used ]; | |
77 } | |
38 } | 78 } |
39 | 79 |
40 StringBuffer append( String s ){ | 80 StringBuffer append( String s ){ |
41 buf.append( s ); | 81 version(Tango){ |
82 buf.append( s ); | |
83 } else { // Phobos | |
84 if( buf.length < used + s.length ){ | |
85 buf.length = used + s.length + STDINCR; | |
86 } | |
87 buf[ used .. used + s.length ] = s; | |
88 used += s.length; | |
89 } | |
42 return this; | 90 return this; |
43 } | 91 } |
44 | 92 |
45 StringBuffer append( String s, int offset, int len ){ | 93 StringBuffer append( String s, int offset, int len ){ |
46 buf.append( s[ offset .. offset+len ] ); | 94 return append( s[ offset .. offset+len ] ); |
47 return this; | |
48 } | 95 } |
49 | 96 |
50 StringBuffer append( StringBuffer other ){ | 97 StringBuffer append( StringBuffer other ){ |
51 buf.append( other.slice() ); | 98 return append( other.slice() ); |
52 return this; | |
53 } | 99 } |
54 | 100 |
55 StringBuffer append( Object obj ){ | 101 StringBuffer append( Object obj ){ |
56 buf.append( obj.toString() ); | 102 return append( obj.toString() ); |
57 return this; | |
58 } | 103 } |
59 | 104 |
60 StringBuffer append( char c ){ | 105 StringBuffer append( char c ){ |
61 buf.append( c ); | 106 char[1] src; |
62 return this; | 107 src[0] = c; |
108 return append( cast(String)src ); | |
63 } | 109 } |
64 | 110 |
65 StringBuffer append( wchar c ){ | 111 StringBuffer append( wchar c ){ |
66 wchar[1] src; | 112 wchar[1] src; |
67 src[0] = c; | 113 src[0] = c; |
68 char[2] trg; | 114 version(Tango){ |
69 auto s = tango.text.convert.Utf.toString( src, trg ); | 115 char[2] trg; |
70 buf.append( s ); | 116 auto arr = tango.text.convert.Utf.toString( src, trg ); |
71 return this; | 117 } else { // Phobos |
118 auto arr = std.utf.toUTF8( src ); | |
119 } | |
120 return append( arr ); | |
72 } | 121 } |
73 | 122 |
74 StringBuffer append( int i ){ | 123 StringBuffer append( int i ){ |
75 buf.append( String_valueOf(i) ); | 124 return append( String_valueOf(i) ); |
76 return this; | |
77 } | 125 } |
78 | 126 |
79 StringBuffer append( long i ){ | 127 StringBuffer append( long i ){ |
80 buf.append( String_valueOf(i) ); | 128 return append( String_valueOf(i) ); |
81 return this; | |
82 } | 129 } |
83 | 130 |
84 StringBuffer append( dchar c ){ | 131 StringBuffer append( dchar c ){ |
85 dchar[1] src; | 132 dchar[1] src; |
86 src[0] = c; | 133 src[0] = c; |
87 char[4] trg; | 134 version(Tango){ |
88 auto s = tango.text.convert.Utf.toString( src, trg ); | 135 char[4] trg; |
89 buf.append( s ); | 136 auto arr = tango.text.convert.Utf.toString( src, trg ); |
137 } else { // Phobos | |
138 auto arr = std.utf.toUTF8( src ); | |
139 } | |
140 return append( arr ); | |
141 } | |
142 | |
143 | |
144 StringBuffer insert(int offset, String str){ | |
145 return replace( offset, offset, str ); | |
146 } | |
147 | |
148 StringBuffer insert(int offset, StringBuffer other){ | |
149 return insert( offset, other.slice()); | |
150 } | |
151 | |
152 StringBuffer replace(int start, int end, String str) { | |
153 version(Tango){ | |
154 buf.select(start, end-start); | |
155 buf.replace(str); | |
156 buf.select(); | |
157 } else { // Phobos | |
158 int incr = end - start - str.length; | |
159 if( incr > 0 ){ | |
160 if( buf.length < used + incr ){ | |
161 char[] newbuf = new char[ 2*(used + incr) + STDINCR ]; | |
162 newbuf[ 0 .. start ] = buf[ 0 .. start ]; | |
163 newbuf[ start .. start + str.length ] = str; | |
164 newbuf[ start + str.length .. used + str.length ] = buf[ end .. used ]; | |
165 buf = newbuf; | |
166 } | |
167 else{ | |
168 char* s = buf.ptr + start; | |
169 char* t = buf.ptr + start + str.length; | |
170 char* e = buf.ptr + start + str.length; | |
171 while( s !is e ){ | |
172 *t = *s; | |
173 s++; t++; | |
174 } | |
175 buf[ start .. start + str.length ] = str; | |
176 } | |
177 } | |
178 else if( incr == 0 ){ | |
179 buf[ start .. end ] = str; | |
180 } | |
181 else{ | |
182 buf[ start .. end ] = str; | |
183 char* s = buf.ptr + end; | |
184 char* t = buf.ptr + start + str.length; | |
185 char* e = buf.ptr + start + str.length; | |
186 while( s !is e ){ | |
187 *t = *s; | |
188 s--; t--; | |
189 } | |
190 } | |
191 used += incr; | |
192 } | |
90 return this; | 193 return this; |
91 } | 194 } |
92 | 195 |
93 | |
94 StringBuffer insert(int offset, String str){ | |
95 buf.select(offset, 0); | |
96 buf.replace(str); | |
97 buf.select(); | |
98 return this; | |
99 } | |
100 | |
101 StringBuffer insert(int offset, StringBuffer other){ | |
102 insert( offset, other.slice()); | |
103 return this; | |
104 } | |
105 | |
106 StringBuffer replace(int start, int end, String str) { | |
107 buf.select(start, end-start); | |
108 buf.replace(str); | |
109 buf.select(); | |
110 return this; | |
111 } | |
112 | |
113 void setLength( int newLength ){ | 196 void setLength( int newLength ){ |
114 buf.truncate( newLength ); | 197 version(Tango){ |
198 buf.truncate( newLength ); | |
199 } else { // Phobos | |
200 if( buf.length < newLength ){ | |
201 buf.length = 2*newLength + STDINCR; | |
202 } | |
203 used = newLength; | |
204 } | |
115 } | 205 } |
116 | 206 |
117 String substring( int start, int end ){ | 207 String substring( int start, int end ){ |
118 return buf.slice()[ start .. end ].dup; | 208 version(Tango){ |
209 return buf.slice()[ start .. end ].dup; | |
210 } else { // Phobos | |
211 return buf[ start .. end ].idup; | |
212 } | |
119 } | 213 } |
120 | 214 |
121 void delete_( int start, int end ){ | 215 void delete_( int start, int end ){ |
122 buf.select( start, end - start ); | 216 replace( start, end, "" ); |
123 buf.remove(); | |
124 } | 217 } |
125 String slice(){ | 218 String slice(){ |
126 return buf.slice(); | 219 version(Tango){ |
220 return buf.slice(); | |
221 } else { // Phobos | |
222 return cast(String)buf[ 0 .. used ]; | |
223 } | |
127 } | 224 } |
128 void truncate( int start ){ | 225 void truncate( int start ){ |
129 buf.truncate( start ); | 226 setLength( start ); |
130 } | 227 } |
131 } | 228 } |
132 | 229 |
133 | 230 |