@@ -363,10 +363,17 @@ return ret; } - (OFString*)componentsJoinedByString: (OFString*)separator +{ + return [self componentsJoinedByString: separator + usingSelector: @selector(description)]; +} + +- (OFString*)componentsJoinedByString: (OFString*)separator + usingSelector: (SEL)selector { OFAutoreleasePool *pool, *pool2; OFMutableString *ret; id *cArray; size_t i, count = [self count]; @@ -373,11 +380,11 @@ IMP append; if (count == 0) return @""; if (count == 1) - return [[self firstObject] description]; + return [[self firstObject] performSelector: selector]; ret = [OFMutableString string]; append = [ret methodForSelector: @selector(appendString:)]; pool = [[OFAutoreleasePool alloc] init]; @@ -384,16 +391,18 @@ cArray = [self cArray]; pool2 = [[OFAutoreleasePool alloc] init]; for (i = 0; i < count - 1; i++) { - append(ret, @selector(appendString:), [cArray[i] description]); + append(ret, @selector(appendString:), + [cArray[i] performSelector: selector]); append(ret, @selector(appendString:), separator); [pool2 releaseObjects]; } - append(ret, @selector(appendString:), [cArray[i] description]); + append(ret, @selector(appendString:), + [cArray[i] performSelector: selector]); [ret makeImmutable]; [pool release]; @@ -502,10 +511,29 @@ [pool release]; [element autorelease]; return element; } + +- (OFString*)JSONRepresentation +{ + OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; + OFMutableString *JSON; + + JSON = [[self componentsJoinedByString: @"," + usingSelector: @selector(JSONRepresentation)] + mutableCopy]; + [pool release]; + [JSON autorelease]; + + [JSON prependString: @"["]; + [JSON appendString: @"]"]; + + [JSON makeImmutable]; + + return JSON; +} - (void)makeObjectsPerformSelector: (SEL)selector { id *cArray = [self cArray]; size_t i, count = [self count];