︙ | | | ︙ | |
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#import "OFOutOfRangeException.h"
#import "OFUndefinedKeyException.h"
static struct {
Class isa;
} placeholder;
static OFCharacterSet *URLQueryPartAllowedCharacterSet = nil;
@interface OFDictionary ()
- (OFString *)
of_JSONRepresentationWithOptions: (OFJSONRepresentationOptions)options
depth: (size_t)depth;
@end
|
|
|
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#import "OFOutOfRangeException.h"
#import "OFUndefinedKeyException.h"
static struct {
Class isa;
} placeholder;
static OFCharacterSet *URIQueryPartAllowedCharacterSet = nil;
@interface OFDictionary ()
- (OFString *)
of_JSONRepresentationWithOptions: (OFJSONRepresentationOptions)options
depth: (size_t)depth;
@end
|
︙ | | | ︙ | |
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
OFEnumerator *_keyEnumerator;
}
- (instancetype)initWithDictionary: (OFDictionary *)dictionary;
@end
OF_DIRECT_MEMBERS
@interface OFURLQueryPartAllowedCharacterSet: OFCharacterSet
+ (OFCharacterSet *)URLQueryPartAllowedCharacterSet;
@end
@implementation OFDictionaryPlaceholder
- (instancetype)init
{
return (id)[[OFMapTableDictionary alloc] init];
}
|
|
|
|
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
OFEnumerator *_keyEnumerator;
}
- (instancetype)initWithDictionary: (OFDictionary *)dictionary;
@end
OF_DIRECT_MEMBERS
@interface OFURIQueryPartAllowedCharacterSet: OFCharacterSet
+ (OFCharacterSet *)URIQueryPartAllowedCharacterSet;
@end
@implementation OFDictionaryPlaceholder
- (instancetype)init
{
return (id)[[OFMapTableDictionary alloc] init];
}
|
︙ | | | ︙ | |
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
|
- (void)dealloc
{
OF_DEALLOC_UNSUPPORTED
}
@end
@implementation OFURLQueryPartAllowedCharacterSet
+ (void)initialize
{
if (self != [OFURLQueryPartAllowedCharacterSet class])
return;
URLQueryPartAllowedCharacterSet =
[[OFURLQueryPartAllowedCharacterSet alloc] init];
}
+ (OFCharacterSet *)URLQueryPartAllowedCharacterSet
{
return URLQueryPartAllowedCharacterSet;
}
- (instancetype)autorelease
{
return self;
}
|
|
|
|
|
|
|
|
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
|
- (void)dealloc
{
OF_DEALLOC_UNSUPPORTED
}
@end
@implementation OFURIQueryPartAllowedCharacterSet
+ (void)initialize
{
if (self != [OFURIQueryPartAllowedCharacterSet class])
return;
URIQueryPartAllowedCharacterSet =
[[OFURIQueryPartAllowedCharacterSet alloc] init];
}
+ (OFCharacterSet *)URIQueryPartAllowedCharacterSet
{
return URIQueryPartAllowedCharacterSet;
}
- (instancetype)autorelease
{
return self;
}
|
︙ | | | ︙ | |
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
667
668
669
670
671
|
[ret makeImmutable];
objc_autoreleasePoolPop(pool);
return ret;
}
- (OFString *)stringByURLEncoding
{
OFMutableString *ret = [OFMutableString string];
void *pool = objc_autoreleasePoolPush();
OFEnumerator *keyEnumerator = [self keyEnumerator];
OFEnumerator *objectEnumerator = [self objectEnumerator];
OFCharacterSet *allowed = [OFURLQueryPartAllowedCharacterSet
URLQueryPartAllowedCharacterSet];
bool first = true;
OFObject *key, *object;
while ((key = [keyEnumerator nextObject]) != nil &&
(object = [objectEnumerator nextObject]) != nil) {
if OF_UNLIKELY (first)
first = false;
else
[ret appendString: @"&"];
[ret appendString: [key.description
stringByURLEncodingWithAllowedCharacters: allowed]];
[ret appendString: @"="];
[ret appendString: [object.description
stringByURLEncodingWithAllowedCharacters: allowed]];
}
[ret makeImmutable];
objc_autoreleasePoolPop(pool);
return ret;
|
|
|
|
|
>
|
>
|
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
667
668
669
670
671
672
673
|
[ret makeImmutable];
objc_autoreleasePoolPop(pool);
return ret;
}
- (OFString *)URIQueryString
{
OFMutableString *ret = [OFMutableString string];
void *pool = objc_autoreleasePoolPush();
OFEnumerator *keyEnumerator = [self keyEnumerator];
OFEnumerator *objectEnumerator = [self objectEnumerator];
OFCharacterSet *allowed = [OFURIQueryPartAllowedCharacterSet
URIQueryPartAllowedCharacterSet];
bool first = true;
OFObject *key, *object;
while ((key = [keyEnumerator nextObject]) != nil &&
(object = [objectEnumerator nextObject]) != nil) {
if OF_UNLIKELY (first)
first = false;
else
[ret appendString: @"&"];
[ret appendString: [key.description
stringByAddingPercentEncodingWithAllowedCharacters:
allowed]];
[ret appendString: @"="];
[ret appendString: [object.description
stringByAddingPercentEncodingWithAllowedCharacters:
allowed]];
}
[ret makeImmutable];
objc_autoreleasePoolPop(pool);
return ret;
|
︙ | | | ︙ | |