ObjFW  Diff

Differences From Artifact [31cc01efd6]:

To Artifact [878ad12e02]:


16
17
18
19
20
21
22

23
24
25
26
27
28
29
30
31
32
33



34
35











































































36
37

38
39

40
41




42
43
44
45

46
47
48
49
50
51
52
53
54
55
56
57


58
59
60
61
62
63
64
65
66
67
68
69
70


71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37


38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118


119
120
121
122
123
124
125

126



127
128
129
130
131
132
133


134
135
136
137
138
139
140
141
142
143
144
145
146


147
148
149
150




151
152
153
154
155
156





































































































































































































157
158
159
160
161
162
163







+











+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


+


+
-
-
+
+
+
+



-
+
-
-
-







-
-
+
+











-
-
+
+


-
-
-
-






-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-








#include "config.h"

#include <stdlib.h>
#include <string.h>

#import "OFConstantString.h"
#import "OFString_UTF8.h"

#import "OFInvalidEncodingException.h"
#import "OFNotImplementedException.h"
#import "OFOutOfMemoryException.h"

#ifdef OF_APPLE_RUNTIME
# import <objc/runtime.h>

void *_OFConstantStringClassReference;
#endif

@interface OFString_const: OFString_UTF8
@end

@implementation OFConstantString
#ifdef OF_APPLE_RUNTIME
@implementation OFString_const
+ alloc
{
	@throw [OFNotImplementedException exceptionWithClass: self
						    selector: _cmd];
}

- (void)addMemoryToPool: (void*)ptr
{
	@throw [OFNotImplementedException exceptionWithClass: isa
						    selector: _cmd];
}

- (void*)allocMemoryWithSize: (size_t)size
{
	@throw [OFNotImplementedException exceptionWithClass: isa
						    selector: _cmd];
}

- (void*)allocMemoryForNItems: (size_t)nitems
		     withSize: (size_t)size
{
	@throw [OFNotImplementedException exceptionWithClass: isa
						    selector: _cmd];
}

- (void*)resizeMemory: (void*)ptr
	       toSize: (size_t)size
{
	@throw [OFNotImplementedException exceptionWithClass: isa
						    selector: _cmd];
}

- (void*)resizeMemory: (void*)ptr
	     toNItems: (size_t)nitems
	     withSize: (size_t)size
{
	@throw [OFNotImplementedException exceptionWithClass: isa
						    selector: _cmd];
}

- (void)freeMemory: (void*)ptr
{
	@throw [OFNotImplementedException exceptionWithClass: isa
						    selector: _cmd];
}

- retain
{
	return self;
}

- autorelease
{
	return self;
}

- (unsigned int)retainCount
{
	return OF_RETAIN_COUNT_MAX;
}

- (void)release
{
}

- (void)dealloc
{
	@throw [OFNotImplementedException exceptionWithClass: isa
						    selector: _cmd];
	[super dealloc];	/* Get rid of a stupid warning */
}
@end

@implementation OFConstantString
+ (void)load
{
#ifdef OF_APPLE_RUNTIME
	objc_setFutureClass((Class)&_OFConstantStringClassReference,
	    "OFConstantString");
#endif
}
#endif

	if (self == [OFConstantString class])
		[self inheritMethodsFromClass: [OFString_UTF8 class]];
}

- (void)finishInitialization
{
	struct of_string_ivars *ivars;
	struct of_string_utf8_ivars *ivars;

	if (initialized == SIZE_MAX)
		return;

	if ((ivars = malloc(sizeof(*ivars))) == NULL)
		@throw [OFOutOfMemoryException
		    exceptionWithClass: isa
			 requestedSize: sizeof(*ivars)];
	memset(ivars, 0, sizeof(*ivars));

	ivars->cString = (char*)s;
	ivars->cStringLength = initialized;
	ivars->cString = cString;
	ivars->cStringLength = cStringLength;

	switch (of_string_check_utf8(ivars->cString, ivars->cStringLength,
	    &ivars->length)) {
	case 1:
		ivars->UTF8 = YES;
		break;
	case -1:
		free(ivars);
		@throw [OFInvalidEncodingException exceptionWithClass: isa];
	}

	s = ivars;
	initialized = SIZE_MAX;
	cString = (char*)ivars;
	isa = [OFString_const class];
}

/*
 * The following methods are not available since it's a constant string, which
 * can't be allocated or initialized at runtime.
 */
+ alloc
{
	@throw [OFNotImplementedException exceptionWithClass: self
						    selector: _cmd];
}

- init
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithUTF8String: (const char*)UTF8String
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithUTF8String: (const char*)UTF8String
	      length: (size_t)UTF8StringLength
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithCString: (const char*)cString
	 encoding: (of_string_encoding_t)encoding
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithCString: (const char*)cString
	 encoding: (of_string_encoding_t)encoding
	   length: (size_t)cStringLength
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithString: (OFString*)string
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithUnicodeString: (const of_unichar_t*)string
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithUnicodeString: (const of_unichar_t*)string
	      byteOrder: (of_endianess_t)byteOrder
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithUnicodeString: (const of_unichar_t*)string
		 length: (size_t)length
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithUnicodeString: (const of_unichar_t*)string
	      byteOrder: (of_endianess_t)byteOrder
		 length: (size_t)length
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithUTF16String: (const uint16_t*)string
	    byteOrder: (of_endianess_t)byteOrder
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithUTF16String: (const uint16_t*)string
	       length: (size_t)length
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithUTF16String: (const uint16_t*)string
	    byteOrder: (of_endianess_t)byteOrder
	       length: (size_t)length
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithFormat: (OFConstantString*)format, ...
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithFormat: (OFConstantString*)format
       arguments: (va_list)args
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithPath: (OFString*)firstComponent, ...
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithPath: (OFString*)firstComponent
     arguments: (va_list)arguments
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithContentsOfFile: (OFString*)path
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithContentsOfFile: (OFString*)path
		encoding: (of_string_encoding_t)encoding
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithContentsOfURL: (OFURL*)URL
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

- initWithContentsOfURL: (OFURL*)URL
	       encoding: (of_string_encoding_t)encoding
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

/* From protocol OFSerializing */
- initWithSerialization: (OFXMLElement*)element
{
	Class c = isa;
	[self release];
	@throw [OFNotImplementedException exceptionWithClass: c
						    selector: _cmd];
}

/*
 * The following methods are not available because constant strings are
 * preallocated by the compiler and thus don't have a memory pool.
 */
- (void)addMemoryToPool: (void*)ptr
{
	@throw [OFNotImplementedException exceptionWithClass: isa
						    selector: _cmd];
}

- (void*)allocMemoryWithSize: (size_t)size
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
190
191
192
193
194
195
196




197
198
199
200
201
202
203







-
-
-
-








- (void)freeMemory: (void*)ptr
{
	@throw [OFNotImplementedException exceptionWithClass: isa
						    selector: _cmd];
}

/*
 * The following methods are unnecessary because constant strings are
 * singletons.
 */
- retain
{
	return self;
}

- autorelease
{
344
345
346
347
348
349
350
351
352


353
354
355
356
357
358
359
360

361
362

363
364
365
366
367
368
369

370
371

372
373
374
375
376
377
378

379
380

381
382
383
384
385
386
387

388
389

390
391
392
393
394
395

396
397

398
399
400
401
402
403

404
405

406
407
408
409
410
411
412

413
414

415
416
417
418
419
420

421
422

423
424
425
426
427
428

429
430

431
432
433
434
435
436

437
438

439
440
441
442
443
444

445
446

447
448
449
450
451
452

453
454

455
456
457
458
459
460

461
462










463
464
465
466
467
468

469
470

471
472
473
474
475
476

477
478

479
480
481
482
483
484

485
486

487
488
489
490
491
492

493
494

495
496
497
498
499
500

501
502

503
504
505
506
507
508

509
510

511
512
513
514
515
516

517
518

519
520
521
522
523
524

525
526

527
528
529
530
531
532

533
534

535
536
537
538
539
540

541
542

543
544
545
546
547
548

549
550

551
552
553
554
555
556

557
558

559
560
561
562
563
564

565
566

567
568
569
570
571
572

573
574

575
576
577
578
579
580

581
582

583
584
585
586
587
588

589
590

591
592
593
594
595
596

597
598

599
600
601
602
603
604

605
606

607
608
609
610
611
612

613
614

615
616
617
618
619
620

621
622

623
624
625
626
627
628

629
630

631
632
633
634
635
636

637
638

639
640
641
642
643
644

645
646

647
648
649
650
651
652

653
654

655
656
657
658
659
660
661

662
663

664
665
666
217
218
219
220
221
222
223


224
225

226
227
228
229
230


231
232

233
234
235
236
237
238


239
240

241
242
243
244
245
246


247
248

249
250
251
252
253
254


255
256

257
258
259
260
261


262
263

264
265
266
267
268


269
270

271
272
273
274
275
276


277
278

279
280
281
282
283


284
285

286
287
288
289
290


291
292

293
294
295
296
297


298
299

300
301
302
303
304


305
306

307
308
309
310
311


312
313

314
315
316
317
318


319
320

321
322
323
324
325
326
327
328
329
330
331
332
333
334


335
336

337
338
339
340
341


342
343

344
345
346
347
348


349
350

351
352
353
354
355


356
357

358
359
360
361
362


363
364

365
366
367
368
369


370
371

372
373
374
375
376


377
378

379
380
381
382
383


384
385

386
387
388
389
390


391
392

393
394
395
396
397


398
399

400
401
402
403
404


405
406

407
408
409
410
411


412
413

414
415
416
417
418


419
420

421
422
423
424
425


426
427

428
429
430
431
432


433
434

435
436
437
438
439


440
441

442
443
444
445
446


447
448

449
450
451
452
453


454
455

456
457
458
459
460


461
462

463
464
465
466
467


468
469

470
471
472
473
474


475
476

477
478
479
480
481


482
483

484
485
486
487
488


489
490

491
492
493
494
495


496
497

498
499
500
501
502
503


504
505

506
507
508
509







-
-
+
+
-





-
-
+

-
+





-
-
+

-
+





-
-
+

-
+





-
-
+

-
+




-
-
+

-
+




-
-
+

-
+





-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+
+
+
+
+
+
+
+
+
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+




-
-
+

-
+





-
-
+

-
+



{
	@throw [OFNotImplementedException exceptionWithClass: isa
						    selector: _cmd];
	[super dealloc];	/* Get rid of a stupid warning */
}

/*
 * In all following methods, it is checked whether the constant string has been
 * initialized. If not, it will be initialized. Finally, the implementation of
 * In all following methods, the constant string is converted to an
 * OFString_UTF8 and the message sent again.
 * the superclass will be called.
 */

/* From protocol OFCopying */
- copy
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super copy];
	return [self copy];
}

/* From protocol OFMutableCopying */
- mutableCopy
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super mutableCopy];
	return [self mutableCopy];
}

/* From protocol OFComparing */
- (of_comparison_result_t)compare: (id)object
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super compare: object];
	return [self compare: object];
}

/* From OFObject, but reimplemented in OFString */
- (BOOL)isEqual: (id)object
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super isEqual: object];
	return [self isEqual: object];
}

- (uint32_t)hash
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super hash];
	return [self hash];
}

- (OFString*)description
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super description];
	return [self description];
}

/* From OFString */
- (const char*)UTF8String
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super UTF8String];
	return [self UTF8String];
}

- (const char*)cStringWithEncoding: (of_string_encoding_t)encoding
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super cStringWithEncoding: encoding];
	return [self cStringWithEncoding: encoding];
}

- (size_t)length
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super length];
	return [self length];
}

- (size_t)UTF8StringLength
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super UTF8StringLength];
	return [self UTF8StringLength];
}

- (size_t)cStringLengthWithEncoding: (of_string_encoding_t)encoding
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super cStringLengthWithEncoding: encoding];
	return [self cStringLengthWithEncoding: encoding];
}

- (of_comparison_result_t)caseInsensitiveCompare: (OFString*)otherString
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super caseInsensitiveCompare: otherString];
	return [self caseInsensitiveCompare: otherString];
}

- (of_unichar_t)characterAtIndex: (size_t)index
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super characterAtIndex: index];
	return [self characterAtIndex: index];
}

- (void)getCharacters: (of_unichar_t*)buffer
	      inRange: (of_range_t)range
{
	[self finishInitialization];

	return [self getCharacters: buffer
			   inRange: range];
}

- (size_t)indexOfFirstOccurrenceOfString: (OFString*)string
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super indexOfFirstOccurrenceOfString: string];
	return [self indexOfFirstOccurrenceOfString: string];
}

- (size_t)indexOfLastOccurrenceOfString: (OFString*)string
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super indexOfLastOccurrenceOfString: string];
	return [self indexOfLastOccurrenceOfString: string];
}

- (BOOL)containsString: (OFString*)string
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super containsString: string];
	return [self containsString: string];
}

- (OFString*)substringWithRange: (of_range_t)range
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super substringWithRange: range];
	return [self substringWithRange: range];
}

- (OFString*)stringByAppendingString: (OFString*)string
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super stringByAppendingString: string];
	return [self stringByAppendingString: string];
}

- (OFString*)stringByPrependingString: (OFString*)string
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super stringByPrependingString: string];
	return [self stringByPrependingString: string];
}

- (OFString*)uppercaseString
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super uppercaseString];
	return [self uppercaseString];
}

- (OFString*)lowercaseString
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super lowercaseString];
	return [self lowercaseString];
}

- (OFString*)stringByDeletingLeadingWhitespaces
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super stringByDeletingLeadingWhitespaces];
	return [self stringByDeletingLeadingWhitespaces];
}

- (OFString*)stringByDeletingTrailingWhitespaces
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super stringByDeletingTrailingWhitespaces];
	return [self stringByDeletingTrailingWhitespaces];
}

- (OFString*)stringByDeletingEnclosingWhitespaces
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super stringByDeletingEnclosingWhitespaces];
	return [self stringByDeletingEnclosingWhitespaces];
}

- (BOOL)hasPrefix: (OFString*)prefix
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super hasPrefix: prefix];
	return [self hasPrefix: prefix];
}

- (BOOL)hasSuffix: (OFString*)suffix
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super hasSuffix: suffix];
	return [self hasSuffix: suffix];
}

- (OFArray*)componentsSeparatedByString: (OFString*)delimiter
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super componentsSeparatedByString: delimiter];
	return [self componentsSeparatedByString: delimiter];
}

- (OFArray*)pathComponents
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super pathComponents];
	return [self pathComponents];
}

- (OFString*)lastPathComponent
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super lastPathComponent];
	return [self lastPathComponent];
}

- (OFString*)stringByDeletingLastPathComponent
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super stringByDeletingLastPathComponent];
	return [self stringByDeletingLastPathComponent];
}

- (intmax_t)decimalValue
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super decimalValue];
	return [self decimalValue];
}

- (uintmax_t)hexadecimalValue
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super hexadecimalValue];
	return [self hexadecimalValue];
}

- (float)floatValue
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super floatValue];
	return [self floatValue];
}

- (double)doubleValue
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super doubleValue];
	return [self doubleValue];
}

- (const of_unichar_t*)unicodeString
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super unicodeString];
	return [self unicodeString];
}

- (const uint16_t*)UTF16String
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super UTF16String];
	return [self UTF16String];
}

- (void)writeToFile: (OFString*)path
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super writeToFile: path];
	return [self writeToFile: path];
}

#ifdef OF_HAVE_BLOCKS
- (void)enumerateLinesUsingBlock: (of_string_line_enumeration_block_t)block
{
	if (initialized != SIZE_MAX)
		[self finishInitialization];
	[self finishInitialization];

	return [super enumerateLinesUsingBlock: block];
	return [self enumerateLinesUsingBlock: block];
}
#endif
@end