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