@ProCxx

Страница 737 из 2477
Andrei
02.04.2017
22:48:32
А, ну так я и говорю

Это в чужой библиотеке

сишная каша

там пожалуйста

Google
Andrei
02.04.2017
22:48:44
делай что хочешь

Не плосовый код

Michael
02.04.2017
22:49:04
да, такой вопрос возник только потоум что он не хочетр жрать мой чар поинтер

ну в результате я аккуратнее написал

size_t outSize; std::vector<char> out(0x100000); uint8_t* data = (uint8_t*)out.data(); mrb_dump_irep(mrb, irep, 0, &data, &outSize); out.resize(outSize);

Andrei
02.04.2017
22:50:16
Да, тут всё ок.

К слову еще можно писать так

&out[0]

И соотв

Michael
02.04.2017
22:50:57
знаю-знаю

но это очень невыразительно и я везде подправляю это на ::data()

Andrei
02.04.2017
22:51:23
(mrb_dump_irep(mrb, irep, 0, (uint8_t**)&&out[0], &outSize);)

Да, с data лучше, спору нет.

Google
Michael
02.04.2017
22:51:49
настоящий сишный код

идеал

вот поэтому я боялся этих языков с детства

слава богу что все оказалось не так

Andrei
02.04.2017
22:52:32
Ну потому что и не надо так писать.

Мы ж в c++ чате.

Michael
02.04.2017
22:53:00
главное чтобы в чате здравого смысла

ой
ага

грязные оптимиизации

Michael
02.04.2017
22:53:42
#define wcs_as_long(str) (*reinterpret_cast<const uint64_t*>(str)) bool ext_equals(const wstr_t & filename, const wchar_t * ext) { return wcs_as_long(ext) == wcs_as_long(filename.c_str() + filename.length() - 4); }

Alex Фэils?︙
02.04.2017
22:54:01
Michael
02.04.2017
22:54:20
почему одному компилятору ведомо

Alex Фэils?︙
02.04.2017
22:55:26
Andrei
02.04.2017
22:55:50
то ли лонг, то ли хрен знает что
это наследие 16-битной архитектуры, когда была разница между дальними и ближними указтелями, сейчас она, насколько я понимаю выражается только в перформансе.

Michael
02.04.2017
22:56:00
да, просто давала неверный результат при вызове об статическую константу.

и верный в памяти

Alex Фэils?︙
02.04.2017
22:57:39
Дык каст из пойнтеров в числа и оьратно есть уб

Google
Michael
02.04.2017
22:58:20
ну это ж каст значения по адресу в число

не должно быть криминально

Alex Фэils?︙
02.04.2017
22:58:58
Т.е. сначала разыменовать уаазатель, а потом взять лонг?

Andrei
02.04.2017
22:59:07
вообще-то я вижу что в той функции сравниваются поинтеры а не строки

так и задумано?

Наверное нет.

Michael
02.04.2017
22:59:42
я думаю, ты неправ

сравниваются значения, это работает

звездочку в макросе узрей

макрос возвращает ulong

Alex Фэils?︙
02.04.2017
23:00:45
Это... а приоритет операций верный?

Andrei
02.04.2017
23:00:47
Сравниваются 8 байт.

Michael
02.04.2017
23:01:00
да

Andrei
02.04.2017
23:01:01
Если строчка короче 8 байт

то сравнивается черт пойми что

это UB

Michael
02.04.2017
23:01:18
да, но она не короче 8 байт

Andrei
02.04.2017
23:01:25
Обе не короче?

Michael
02.04.2017
23:01:41
да, обе не короче. не бывает

все имена файлов нормализованы задолго до этого

Google
Michael
02.04.2017
23:02:15
я согласен что функция говно но она работает

Andrei
02.04.2017
23:02:26
Короче, это плохой код. Его сложно читать. алиасить стандартные типы НЕ НАДО

Michael
02.04.2017
23:02:42
та да

Andrei
02.04.2017
23:02:45
прям совсем-совсем-совсем не надо.

Michael
02.04.2017
23:02:48
я наверное лучше автошить буду

тогда и необходимость в алиасах отпадет

Michael
02.04.2017
23:03:39
потому что длина элемента 2 байта

Andrei
02.04.2017
23:03:47
Господи.

Michael
02.04.2017
23:03:48
это массив wchar

Andrei
02.04.2017
23:03:51
Понятно.

Короче в этой функции плохо ВСЁ

даже wchar :D

Michael
02.04.2017
23:04:19
я не соглашусь, довольно очевидно что она делает

макроса не должно быть

Andrei
02.04.2017
23:04:30
Вместо человеческого UTF8

Michael
02.04.2017
23:04:31
алиаса стринга не должно быть

так норм

Вместо человеческого UTF8
простите, утф-8 поддерживается стандартной библиотекой?

Google
Michael
02.04.2017
23:04:54
я все экспортирую в utf-8 если что

Alex Фэils?︙
02.04.2017
23:04:56
Да)

Michael
02.04.2017
23:05:15
литералы видел, а где функции?

std::string не предлагать, в дебаге будет херня отображаться

в общем тут не могу согласиться пока что

если вы мне не откроете глаза что работать в utf-8 можно бесшовно

Andrei
02.04.2017
23:06:42
bool ext_equals(const std::wstring& filename, const wchar_t * ext) { return std::wstring(ext) == filename.substr(filename.size() - 4); }

Alex Фэils?︙
02.04.2017
23:06:54
codecvt вроде б может

Andrei
02.04.2017
23:07:13
Да ты офигел.

Michael
02.04.2017
23:07:23
compare не устроил почему?

какой к черту сабстринг и аллокация?

зачем?

Andrei
02.04.2017
23:07:45
Это у тебя быдлокод, а это нормальный, читаемый maintainable код

Никаких аллокаций и сабстрингов не будет, компилятор это всё выкинет к чертовой матери.

Michael
02.04.2017
23:08:16
почему не compare?

Andrei
02.04.2017
23:08:28
Что значит почему?

какая разница? == короче и читаемее чем compare

Michael
02.04.2017
23:09:07
ты же все равно вызываешь substr

короче нет, это загончик

Andrei
02.04.2017
23:09:25
Лол, ок.

Страница 737 из 2477