annotate lisp/oobr/tree-nx/String.m @ 64:a01e7a40045c r19-16-pre7

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