︙ | | |
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
|
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
|
-
-
+
+
|
OFUnichar tc =
of_unicode_casefolding_table[oc >> 8][oc & 0xFF];
if (tc)
oc = tc;
}
#else
c = of_ascii_toupper(c);
oc = of_ascii_toupper(oc);
c = OFASCIIToUpper(c);
oc = OFASCIIToUpper(oc);
#endif
if (c > oc) {
objc_autoreleasePoolPop(pool);
return OFOrderedDescending;
}
if (c < oc) {
|
︙ | | |
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
|
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
|
-
+
-
+
-
-
-
+
+
+
-
+
|
return OFOrderedSame;
}
- (unsigned long)hash
{
const OFUnichar *characters = self.characters;
size_t length = self.length;
uint32_t hash;
unsigned long hash;
OF_HASH_INIT(hash);
OFHashInit(&hash);
for (size_t i = 0; i < length; i++) {
const OFUnichar c = characters[i];
OF_HASH_ADD(hash, (c & 0xFF0000) >> 16);
OF_HASH_ADD(hash, (c & 0x00FF00) >> 8);
OF_HASH_ADD(hash, c & 0x0000FF);
OFHashAdd(&hash, (c & 0xFF0000) >> 16);
OFHashAdd(&hash, (c & 0x00FF00) >> 8);
OFHashAdd(&hash, c & 0x0000FF);
}
OF_HASH_FINALIZE(hash);
OFHashFinalize(&hash);
return hash;
}
- (OFString *)description
{
return [[self copy] autorelease];
|
︙ | | |
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
|
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
|
-
+
|
if (options & OFJSONRepresentationOptionJSON5) {
[JSON replaceOccurrencesOfString: @"\n" withString: @"\\\n"];
if (options & OFJSONRepresentationOptionIsIdentifier) {
const char *cString = self.UTF8String;
if ((!of_ascii_isalpha(cString[0]) &&
if ((!OFASCIIIsAlpha(cString[0]) &&
cString[0] != '_' && cString[0] != '$') ||
strpbrk(cString, " \n\r\t\b\f\\\"'") != NULL) {
[JSON prependString: @"\""];
[JSON appendString: @"\""];
}
} else {
[JSON prependString: @"\""];
|
︙ | | |
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
|
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
|
-
+
-
+
|
uint8_t tmp = (uint8_t)length;
data = [OFMutableData dataWithCapacity: length + 2];
[data addItem: &type];
[data addItem: &tmp];
} else if (length <= UINT16_MAX) {
uint8_t type = 0xDA;
uint16_t tmp = OF_BSWAP16_IF_LE((uint16_t)length);
uint16_t tmp = OFToBigEndian16((uint16_t)length);
data = [OFMutableData dataWithCapacity: length + 3];
[data addItem: &type];
[data addItems: &tmp count: sizeof(tmp)];
} else if (length <= UINT32_MAX) {
uint8_t type = 0xDB;
uint32_t tmp = OF_BSWAP32_IF_LE((uint32_t)length);
uint32_t tmp = OFToBigEndian32((uint32_t)length);
data = [OFMutableData dataWithCapacity: length + 5];
[data addItem: &type];
[data addItems: &tmp count: sizeof(tmp)];
} else
@throw [OFOutOfRangeException exception];
|
︙ | | |
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
|
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
|
-
+
|
- (long long)longLongValueWithBase: (int)base
{
void *pool = objc_autoreleasePoolPush();
const char *UTF8String = self.UTF8String;
bool negative = false;
long long value = 0;
while (of_ascii_isspace(*UTF8String))
while (OFASCIIIsSpace(*UTF8String))
UTF8String++;
switch (*UTF8String) {
case '-':
negative = true;
case '+':
UTF8String++;
|
︙ | | |
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
|
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
|
-
+
-
+
-
+
|
}
}
if (base == 0)
base = 10;
while (*UTF8String != '\0') {
unsigned char c = of_ascii_toupper(*UTF8String++);
unsigned char c = OFASCIIToUpper(*UTF8String++);
if (c >= '0' && c <= '9')
c -= '0';
else if (c >= 'A' && c <= 'Z')
c -= ('A' - 10);
else if (of_ascii_isspace(c)) {
else if (OFASCIIIsSpace(c)) {
while (*UTF8String != '\0')
if (!of_ascii_isspace(*UTF8String++))
if (!OFASCIIIsSpace(*UTF8String++))
@throw [OFInvalidFormatException
exception];
break;
} else
@throw [OFInvalidFormatException exception];
|
︙ | | |
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
|
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
|
-
+
|
- (unsigned long long)unsignedLongLongValueWithBase: (int)base
{
void *pool = objc_autoreleasePoolPush();
const char *UTF8String = self.UTF8String;
unsigned long long value = 0;
while (of_ascii_isspace(*UTF8String))
while (OFASCIIIsSpace(*UTF8String))
UTF8String++;
switch (*UTF8String) {
case '-':
@throw [OFInvalidFormatException exception];
case '+':
UTF8String++;
|
︙ | | |
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
|
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
|
-
+
-
+
-
+
|
}
}
if (base == 0)
base = 10;
while (*UTF8String != '\0') {
unsigned char c = of_ascii_toupper(*UTF8String++);
unsigned char c = OFASCIIToUpper(*UTF8String++);
if (c >= '0' && c <= '9')
c -= '0';
else if (c >= 'A' && c <= 'Z')
c -= ('A' - 10);
else if (of_ascii_isspace(c)) {
else if (OFASCIIIsSpace(c)) {
while (*UTF8String != '\0')
if (!of_ascii_isspace(*UTF8String++))
if (!OFASCIIIsSpace(*UTF8String++))
@throw [OFInvalidFormatException
exception];
break;
} else
@throw [OFInvalidFormatException exception];
|
︙ | | |
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
|
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
|
+
-
-
+
+
-
+
|
OFFreeMemory(buffer);
@throw [OFInvalidEncodingException exception];
}
if (swap) {
if (c > 0xFFFF) {
c -= 0x10000;
buffer[j++] = OFByteSwap16(0xD800 | (c >> 10));
buffer[j++] = OF_BSWAP16(0xD800 | (c >> 10));
buffer[j++] = OF_BSWAP16(0xDC00 | (c & 0x3FF));
buffer[j++] =
OFByteSwap16(0xDC00 | (c & 0x3FF));
} else
buffer[j++] = OF_BSWAP16(c);
buffer[j++] = OFByteSwap16(c);
} else {
if (c > 0xFFFF) {
c -= 0x10000;
buffer[j++] = 0xD800 | (c >> 10);
buffer[j++] = 0xDC00 | (c & 0x3FF);
} else
buffer[j++] = c;
|
︙ | | |
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
|
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
|
-
+
|
buffer = OFAllocMemory(length + 1, sizeof(OFChar32));
@try {
[self getCharacters: buffer inRange: OFRangeMake(0, length)];
buffer[length] = 0;
if (byteOrder != OFByteOrderNative)
for (size_t i = 0; i < length; i++)
buffer[i] = OF_BSWAP32(buffer[i]);
buffer[i] = OFByteSwap32(buffer[i]);
return [[OFData dataWithItemsNoCopy: buffer
count: length + 1
itemSize: sizeof(OFChar32)
freeWhenDone: true] items];
} @catch (id e) {
OFFreeMemory(buffer);
|
︙ | | |