annotate pkg-src/tree-nx/String.m @ 164:4e0740e5aab2

Added tag r20-3b8 for changeset 0132846995bd
author cvs
date Mon, 13 Aug 2007 09:43:39 +0200
parents 0132846995bd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
163
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
1 //
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
2 // String.m -- a generic class to simplify manipulation of (char *)'s
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
3 // Written by Don Yacktman (c) 1993 by Don Yacktman.
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
4 // Version 1.1. All rights reserved.
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
5 //
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
6 // You may use and copy this class freely as long as you
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
7 // comply with the following terms:
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
8 // (1) If you use this class in an application which you
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
9 // intend to sell commercially, as shareware, or otherwise,
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
10 // you may only do so with express written permission
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
11 // of the author. Use in applications which will
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
12 // be distributed free of charge is encouraged.
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
13 // (2) You must include the source code to this object and
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
14 // all accompanying documentation with your application,
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
15 // or provide it to users if requested, free of charge.
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
16 // (3) Do not remove the author's name or any of the
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
17 // copyright notices
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
18 //
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
19
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
20 #import "String.h"
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
21 #import <strings.h>
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
22 #import <appkit/appkit.h>
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
23
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
24 @implementation String
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
25
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
26 - init
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
27 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
28 [super init];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
29 [self setStringOrderTable:NXDefaultStringOrderTable()];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
30 buffer = NULL;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
31 length = 0;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
32 _length = 0;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
33 return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
34 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
35
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
36 - initString:(const char *)aString
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
37 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
38 [self init];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
39 return [self setString:aString];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
40 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
41
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
42 - setStringOrderTable:(NXStringOrderTable *)table
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
43 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
44 orderTable = table;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
45 return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
46 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
47
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
48 - (NXStringOrderTable *)stringOrderTable
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
49 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
50 return orderTable;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
51 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
52
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
53 - allocateBuffer:(int)size
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
54 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
55 return [self allocateBuffer:size fromZone:[self zone]];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
56 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
57
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
58 - allocateBuffer:(int)size fromZone:(NXZone *)zone
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
59 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
60 if (size <= _length) return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
61 [self freeString];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
62 buffer = (char *)NXZoneMalloc(zone, size);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
63 buffer[0] = 0;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
64 _length = size;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
65
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
66 return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
67 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
68
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
69 - setString:(const char *)aString
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
70 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
71 return [self setString:aString fromZone:[self zone]];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
72 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
73
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
74 - setString:(const char *)aString fromZone:(NXZone *)zone
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
75 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
76 if (!aString) return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
77 // Note that I could have used NXCopyStringBufferFromZone() here
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
78 // instead. This works just as well, but it may be slower...
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
79 // I haven't checked that out, though. It might be worth doing.
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
80 [self allocateBuffer:strlen(aString)+1 fromZone:zone];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
81 strcpy(buffer, aString);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
82 length = strlen(buffer);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
83 return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
84 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
85
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
86 - setStringValue:sender
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
87 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
88 if (![sender respondsTo:@selector(stringValue)]) return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
89 return [self setString:[sender stringValue] fromZone:[self zone]];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
90 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
91
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
92 - setStringValue:sender fromZone:(NXZone *)zone
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
93 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
94 if (![sender respondsTo:@selector(stringValue)]) return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
95 return [self setString:[sender stringValue] fromZone:zone];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
96 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
97
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
98 - (const char *)stringValue
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
99 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
100 return buffer;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
101 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
102
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
103 - read:(NXTypedStream *)stream
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
104 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
105 char *tmpStr;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
106 [super read:stream];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
107 NXReadType(stream, "i", &_length);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
108 tmpStr = (char *)malloc(_length + 1);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
109 NXReadType(stream, "*", &tmpStr);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
110 [self setString:tmpStr fromZone:[self zone]];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
111 free(tmpStr);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
112 return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
113 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
114
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
115 - write:(NXTypedStream *)stream
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
116 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
117 [super write:stream];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
118 NXWriteTypes(stream, "i*", &_length, &buffer);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
119 return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
120 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
121
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
122 - copyFromZone:(NXZone *)zone
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
123 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
124 String *myCopy = [super copyFromZone:zone];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
125 // force child to have it's own copy of the string buffer
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
126 [myCopy _unhookBuffer];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
127 [myCopy allocateBuffer:_length fromZone:zone];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
128 [myCopy setString:buffer fromZone:zone];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
129 return myCopy;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
130 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
131
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
132 - _unhookBuffer
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
133 { // used by the copy method so that we don't free the buffer from orig.
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
134 buffer = NULL; _length = 0;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
135 return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
136 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
137
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
138 - freeString
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
139 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
140 if(buffer) free(buffer);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
141 buffer = NULL;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
142 length = 0;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
143 _length = 0;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
144 return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
145 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
146
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
147 - free
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
148 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
149 [self freeString];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
150 return [super free];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
151 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
152
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
153 - cat:(const char *)aString
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
154 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
155 return [self cat:aString
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
156 n:strlen(aString)
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
157 fromZone:[self zone]];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
158 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
159
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
160 - cat:(const char *)aString n:(int)n
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
161 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
162 return [self cat:aString n:n fromZone:[self zone]];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
163 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
164
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
165 - cat:(const char *)aString fromZone:(NXZone *)zone
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
166 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
167 return [self cat:aString n:strlen(aString) fromZone:zone];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
168 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
169
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
170 - cat:(const char *)aString n:(int)n fromZone:(NXZone *)zone
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
171 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
172 char *newBuffer; int newSize;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
173 newSize = length + n + 1;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
174 if (newSize > _length) {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
175 newBuffer = (char *)NXZoneMalloc(zone, newSize);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
176 _length = newSize;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
177 newBuffer[0] = '\0';
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
178 strcat(newBuffer, buffer);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
179 strncat(newBuffer, aString, n);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
180 free(buffer);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
181 buffer = newBuffer;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
182 } else strncat(buffer, aString, n);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
183 length = strlen(buffer);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
184 return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
185 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
186
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
187 - concatenate:sender
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
188 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
189 if (![sender respondsTo:@selector(stringValue)]) return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
190 return [self cat:[sender stringValue]
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
191 n:strlen([sender stringValue])
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
192 fromZone:[self zone]];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
193 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
194
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
195 - concatenate:sender n:(int)n
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
196 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
197 if (![sender respondsTo:@selector(stringValue)]) return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
198 return [self cat:[sender stringValue] n:n fromZone:[self zone]];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
199 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
200
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
201 - concatenate:sender fromZone:(NXZone *)zone
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
202 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
203 if (![sender respondsTo:@selector(stringValue)]) return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
204 return [self cat:[sender stringValue]
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
205 n:strlen([sender stringValue]) fromZone:zone];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
206 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
207
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
208 - concatenate:sender n:(int)n fromZone:(NXZone *)zone
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
209 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
210 if (![sender respondsTo:@selector(stringValue)]) return self;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
211 return [self cat:[sender stringValue] n:n fromZone:zone];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
212 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
213
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
214 - (const char *)rindex:(char)aChar
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
215 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
216 return rindex(buffer, aChar);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
217 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
218
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
219 - (const char *)index:(char)aChar
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
220 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
221 return index(buffer, aChar);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
222 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
223
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
224 - (const char *)strstr:(const char *)subString
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
225 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
226 return strstr(buffer, subString);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
227 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
228
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
229 - subStringRight:subString
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
230 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
231 const char *sub;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
232 if ([subString respondsTo:@selector(stringValue)])
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
233 sub = [subString stringValue];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
234 else return nil; // error if can't get string value
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
235 return [[String allocFromZone:[self zone]]
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
236 initString:strstr(buffer, sub)];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
237 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
238
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
239 - subStringLeft:subString
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
240 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
241 const char *sub;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
242 char *tempString = NXCopyStringBufferFromZone(buffer, [self zone]);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
243 char *temp2;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
244 id retVal = [String alloc];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
245
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
246 if ([subString respondsTo:@selector(stringValue)])
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
247 sub = [subString stringValue];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
248 else return nil; // error if can't get string value
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
249 temp2 = strstr(tempString, sub);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
250 if (temp2) {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
251 temp2[0] = '\0'; // terminate it early
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
252 [retVal initString:tempString];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
253 } else { // substring not found
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
254 return [self copy];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
255 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
256 free(tempString);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
257 return retVal;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
258 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
259
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
260 - (int)length
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
261 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
262 return length;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
263 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
264
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
265 - (BOOL)isEqual:anObject
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
266 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
267 if (anObject == self) return YES;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
268 // doesn't have to be a String object to be equal...
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
269 if ([anObject respondsTo:@selector(stringValue)]) {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
270 if (!NXOrderStrings(buffer, [anObject stringValue],
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
271 YES, -1, orderTable)) return YES;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
272 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
273 return NO;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
274 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
275
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
276 - (int)compareTo:sender
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
277 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
278 return [self compareTo:sender n:(-1) caseSensitive:YES];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
279 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
280
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
281 - (int)compareTo:sender n:(int)n
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
282 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
283 return [self compareTo:sender n:n caseSensitive:YES];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
284 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
285
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
286 - (int)cmp:(const char *)aString
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
287 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
288 return strcmp(buffer, aString);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
289 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
290
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
291 - (int)cmp:(const char *)aString n:(int)n
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
292 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
293 return strncmp(buffer, aString, n);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
294 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
295
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
296 - (int)compareTo:sender caseSensitive:(BOOL)sense
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
297 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
298 return [self compareTo:sender n:(-1) caseSensitive:sense];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
299 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
300
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
301 - (int)compareTo:sender n:(int)n caseSensitive:(BOOL)sense
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
302 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
303 if (![sender respondsTo:@selector(stringValue)]) return 1; // !=
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
304 return NXOrderStrings(buffer, [sender stringValue], sense, n, orderTable);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
305 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
306
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
307 - (int)casecmp:(const char *)aString
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
308 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
309 return strcasecmp(buffer, aString);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
310 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
311
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
312 - (int)casecmp:(const char *)aString n:(int)n
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
313 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
314 return strncasecmp(buffer, aString, n);
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
315 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
316
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
317 - left:(int)count
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
318 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
319 return [self left:count fromZone:[self zone]];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
320 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
321
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
322 - right:(int)count
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
323 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
324 return [self right:count fromZone:[self zone]];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
325 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
326
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
327 - midFrom:(int)start to:(int)end
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
328 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
329 return [self midFrom:start to:end fromZone:[self zone]];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
330 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
331
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
332 - midFrom:(int)start length:(int)len
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
333 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
334 return [self midFrom:start length:len fromZone:[self zone]];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
335 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
336
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
337 - left:(int)count fromZone:(NXZone *)zone
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
338 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
339 char smash = buffer[count];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
340 id newString = [[String allocFromZone:zone] init];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
341 buffer[count] = '\0';
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
342 [newString setString:buffer fromZone:zone];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
343 buffer[count] = smash;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
344 return newString;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
345 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
346
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
347 - right:(int)count fromZone:(NXZone *)zone
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
348 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
349 id newString = [[String allocFromZone:zone] init];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
350 [newString setString:&buffer[length - count] fromZone:zone];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
351 return newString;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
352 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
353
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
354 - midFrom:(int)start to:(int)end fromZone:(NXZone *)zone
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
355 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
356 char smash = buffer[end];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
357 id newString = [[String allocFromZone:zone] init];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
358 buffer[end] = '\0'; // inclusive; end-1 is not.
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
359 [newString setString:&buffer[start - 1] fromZone:zone];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
360 buffer[end] = smash;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
361 return newString;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
362 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
363
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
364 - midFrom:(int)start length:(int)len fromZone:(NXZone *)zone
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
365 {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
366 register int spot = start + len - 1;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
367 char smash = buffer[spot];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
368 id newString = [[String allocFromZone:zone] init];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
369 buffer[spot] = '\0';
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
370 [newString setString:&buffer[start - 1] fromZone:zone];
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
371 buffer[spot] = smash;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
372 return newString;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
373 }
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
374
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
375
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
376 @end