Vitaliy ◀️TriΔng3l▶️
эмодзи
Так они же до 10ffff
Vitaliy ◀️TriΔng3l▶️
4 байта вместе с первым
Pavel
Pavel
Vitaliy ◀️TriΔng3l▶️
Свыше 10ffff уже невалидные
Vitaliy ◀️TriΔng3l▶️
или валидные? O_O
Aidar
Vitaliy ◀️TriΔng3l▶️
Longer encodings are called overlong and are not valid UTF-8 representations of the code point.
Vitaliy ◀️TriΔng3l▶️
а, стоп
Vitaliy ◀️TriΔng3l▶️
это не про то
Vitaliy ◀️TriΔng3l▶️
Но ограничение на 1114112 code points никто не отменял, вроде, и из них занято только чуть больше сотни тысяч
Constantine
Constantine
UTF-16 непредставимые запретили
Vitaliy ◀️TriΔng3l▶️
немного переделал своё говно, убрал возврат символа замены три раза, заменил != || != на == && ==
Constantine
лучше бы ты все-таки списывал с фолли
Vitaliy ◀️TriΔng3l▶️
Vitaliy ◀️TriΔng3l▶️
Да я просто хочу, чтобы конкретно, если символ невалидный, мне выдавало '?'
Vitaliy ◀️TriΔng3l▶️
Причём невалидный исключительно с точки зрения перевода между UTF-8, UTF-16 и UTF-32
Vitaliy ◀️TriΔng3l▶️
На BOM всякие мне пофиг, это уже при чтении файлов надо рассматривать
Constantine
Vitaliy ◀️TriΔng3l▶️
Constantine
Constantine
U+FFFD замечательный символ
Constantine
Constantine
Vitaliy ◀️TriΔng3l▶️
Vitaliy ◀️TriΔng3l▶️
а FFFE верну
Constantine
наркоман шоле
Constantine
а если я потом его в UTF16 впишу?
Vitaliy ◀️TriΔng3l▶️
Constantine
Vitaliy ◀️TriΔng3l▶️
Обработаешь как BOM
Да, буду местами менять байты, но это уже в коде чтения файлов
Vitaliy ◀️TriΔng3l▶️
А в строках — пофиг, там считаю, что нативный endian
Constantine
Короче мой тебе совет, твой сосед с неконтроллируемой агрессии очень не любит, когда ему некорректный возврат возращают
Constantine
Если стандарт юникода говорит, что символ U+FFFE запрещен, то ты не должен его возвращать
Vitaliy ◀️TriΔng3l▶️
Vitaliy ◀️TriΔng3l▶️
Но вообще, грузить UTF-16 я вряд ли буду где-либо
Vitaliy ◀️TriΔng3l▶️
Только UTF-8
Vitaliy ◀️TriΔng3l▶️
return ((cp » 1u) != 0x7fffu && (cp & ~((abTextU32) 0x7ffu)) != 0xd800u) ? cp : abText_InvalidSubstitute;
Vitaliy ◀️TriΔng3l▶️
return (cp <= 0x10ffffu && (cp & 0xfffeu) != 0xfffeu) ? cp : abText_InvalidSubstitute;
Vitaliy ◀️TriΔng3l▶️
еееее, говнокод)))
Oleg
/
Anonymous
Когда не шарю в программировании, но хочу изучать
Крылатый
Vitaliy ◀️TriΔng3l▶️
Не ожидал такого различия на MSVC (32-битном) O_O https://godbolt.org/g/6yGwTx
Vitaliy ◀️TriΔng3l▶️
Но Clang и GCC выдали то же самое, только с разными immediates
Columbus
Columbus
иногда они выглядят даже приятнее, чем обычные ифы
Vitaliy ◀️TriΔng3l▶️
И на ARM тоже сдвиг immediate не был использован, видимо, там 0xd800|(0xd800«16) раскрылось
Vitaliy ◀️TriΔng3l▶️
unsigned int abTextU16_EncodeCP_ValidV3(unsigned int cp) {
if ((cp >> 16u) == 0u) {
return cp;
}
unsigned int low = 0xd800u | (cp & 0x3ffu);
unsigned int high = 0xd800u | (cp >> 10u);
return low | (high << 16u);
}
abTextU16_EncodeCP_ValidV3(unsigned int):
lsrs r3, r0, #16
beq .L14
movs r3, #216
lsls r0, r0, #22
lsrs r0, r0, #22
lsls r3, r3, #8
orrs r3, r0
lsls r0, r3, #16
orrs r0, r3
.L14:
bx lr
Красотища, ни одного ldr
Vitaliy ◀️TriΔng3l▶️
Вот так и буду делать, по отдельности
Vitaliy ◀️TriΔng3l▶️
mov rax, 57982943232 ; 0000000d800d8000H
64-битный MSVC в той функции, что V2 😱
Vitaliy ◀️TriΔng3l▶️
А вот в V3 уже immediates 16-битные
Vitaliy ◀️TriΔng3l▶️
Вообще, эта функция мне и не нужна
Vitaliy ◀️TriΔng3l▶️
Vitaliy ◀️TriΔng3l▶️
Код Quake тоже красиво выглядит, хоть и там не очень строго со стилем было
Chebyrash
B
Ллвм код хорошо выглядит тоже
Vitaliy ◀️TriΔng3l▶️
Линк?
Например https://github.com/id-Software/Quake/blob/master/WinQuake/sv_main.c
Vitaliy ◀️TriΔng3l▶️
да ёпт
Vitaliy ◀️TriΔng3l▶️
к d800 прибавляются верхние биты
Vitaliy ◀️TriΔng3l▶️
а к dc00 нижние
Vitaliy ◀️TriΔng3l▶️
ладно, буду ксорить с dc00, а не орить с d800)))
Aidar
Vitaliy ◀️TriΔng3l▶️
Vitaliy ◀️TriΔng3l▶️
ой, а этот верхний бит и не всегда будет стоять же
Kirill
это нижняя сторона C++)
Для этого есть godbolt. Это во первых. Во вторых этот нечитаемый Пипец с тонной magic numbers и вырвигюглазным синтаксисом не просто является эталонным примером premature optimization. оно еще и написано в стиле универских лаб
Kirill
Сотни статей и десятки книг посвящены именно тому, что так писать нельзя
Vitaliy ◀️TriΔng3l▶️