30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
@implementation OFString (URLEncoding)
- (OFString *)stringByURLEncodingWithAllowedCharacters:
(OFCharacterSet *)allowedCharacters
{
OFMutableString *ret = [OFMutableString string];
void *pool = objc_autoreleasePoolPush();
const of_unichar_t *characters = self.characters;
size_t length = self.length;
bool (*characterIsMember)(id, SEL, of_unichar_t) =
(bool (*)(id, SEL, of_unichar_t))[allowedCharacters
methodForSelector: @selector(characterIsMember:)];
for (size_t i = 0; i < length; i++) {
of_unichar_t c = characters[i];
if (characterIsMember(allowedCharacters,
@selector(characterIsMember:), c))
[ret appendCharacters: &c length: 1];
else {
char buffer[4];
size_t bufferLen;
|
|
|
|
|
|
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
@implementation OFString (URLEncoding)
- (OFString *)stringByURLEncodingWithAllowedCharacters:
(OFCharacterSet *)allowedCharacters
{
OFMutableString *ret = [OFMutableString string];
void *pool = objc_autoreleasePoolPush();
const OFUnichar *characters = self.characters;
size_t length = self.length;
bool (*characterIsMember)(id, SEL, OFUnichar) =
(bool (*)(id, SEL, OFUnichar))[allowedCharacters
methodForSelector: @selector(characterIsMember:)];
for (size_t i = 0; i < length; i++) {
OFUnichar c = characters[i];
if (characterIsMember(allowedCharacters,
@selector(characterIsMember:), c))
[ret appendCharacters: &c length: 1];
else {
char buffer[4];
size_t bufferLen;
|