Size: a a a

2020 April 10

in pro.cxx
Есть ли в си функция типа вот этой метода в го?
источник

A

Alex in pro.cxx
inline uint8_t utf8CharLengthByFirstByte(const uint8_t byte) {
 if (byte < 192)
   return 1;
 else if (byte < 224)
   return 2;
 else if (byte < 240)
   return 3;
 else if (byte < 248)
   return 4;
 else if (byte < 252)
   return 5;
 else if (byte < 254)
   return 6;
 else
   return 1;
}
источник

in pro.cxx
Есть ли в си функция типа вот этой метода в го?
источник

DV

Dmitrij V in pro.cxx
Alex
inline uint8_t utf8CharLengthByFirstByte(const uint8_t byte) {
 if (byte < 192)
   return 1;
 else if (byte < 224)
   return 2;
 else if (byte < 240)
   return 3;
 else if (byte < 248)
   return 4;
 else if (byte < 252)
   return 5;
 else if (byte < 254)
   return 6;
 else
   return 1;
}
ща я маграсовский вариант дождусь и бенч запущу ))
источник

m

magras in pro.cxx
Alex
думаю, вызывать на байте из середины последовательности - ошибка.
Лично мне нужен код, который максимально быстро по первому байту utf8 кода скажет длину этой последовательности, чтобы я мог прыгнуть на следующий символ.
Да, но приведенный код детектирует ее и зачем то возвращает 1. То есть дальше этот байт из середины последовательности скорее всего будет передан в функцию преобразующую символ utf8, которая еще раз будет ее детектить.
источник

A

Alex in pro.cxx
тут, скорее, вопрос в корректности, чем в скорости, код и так проще некуда
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
В стдлибе? Нет
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Можешь написать сам
источник

in pro.cxx
Artöm Bakri Al-Sarmini
В стдлибе? Нет
Ок
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Есть вот это https://en.cppreference.com/w/c/string/multibyte/mbrtoc32, но организовывать ввод и циклы нужно самому
источник

DV

Dmitrij V in pro.cxx
Alex
inline uint8_t utf8CharLengthByFirstByte(const uint8_t byte) {
 if (byte < 192)
   return 1;
 else if (byte < 224)
   return 2;
 else if (byte < 240)
   return 3;
 else if (byte < 248)
   return 4;
 else if (byte < 252)
   return 5;
 else if (byte < 254)
   return 6;
 else
   return 1;
}
На 13МБ словаре (русский в utf8) результаты такие (бенч самописный, тупо загрузка файла и обход строк, чаров, последовательно для каждой ф-ии):

spent milliseconds for utf8len: 52.039
spent milliseconds for utf8CharLengthByFirstByte: 56.358

маграс чё та не захотел кидать код походу ...
источник

DV

Dmitrij V in pro.cxx
ааа, пля, дисковый IO ... нужно в буфер файл загнать ...
источник

A

Alex in pro.cxx
ага, второе чтение будет быстрее первого)
источник

DV

Dmitrij V in pro.cxx
spent milliseconds for utf8len: 27.765
spent milliseconds for utf8CharLengthByFirstByte: 28.523

да одинаково кароче...
источник

DV

Dmitrij V in pro.cxx
без оптимизации:

spent milliseconds for utf8len: 72.199
spent milliseconds for utf8CharLengthByFirstByte: 70.195
источник

YH

Yuri Hudobin in pro.cxx
Надо функции для работы с utf8 и глиптами перенести в какой-нибудь вулкан апи.
источник

PK

Pavel Kazakov in pro.cxx
а вулкан-то тут при чем? О___О
источник

m

magras in pro.cxx
Dmitrij V
На 13МБ словаре (русский в utf8) результаты такие (бенч самописный, тупо загрузка файла и обход строк, чаров, последовательно для каждой ф-ии):

spent milliseconds for utf8len: 52.039
spent milliseconds for utf8CharLengthByFirstByte: 56.358

маграс чё та не захотел кидать код походу ...
Alex уже скинул то что я имел в виду.
источник

DV

Dmitrij V in pro.cxx
magras
Alex уже скинул то что я имел в виду.
ок
источник

PK

Pavel Kazakov in pro.cxx
т.е. итак чтобы нарисовать треугольник в вулкане, надо полгода кодить и втягиваться в это, так теперь с таким предложением если текст захочешь увидеть... еще полгода? :) итого можно будет выпустить книгу "'Hello, triangle!' in Vulkan API in a year" :D
источник