
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
главное чтобы в чате здравого смысла
грязные оптимиизации

Andrei
02.04.2017
22:53:39

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
я наверное лучше автошить буду
тогда и необходимость в алиасах отпадет

Andrei
02.04.2017
23:03:26
Ну явно же ты обманываешь меня

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
алиаса стринга не должно быть
так норм

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 вроде б может

Michael
02.04.2017
23:07:05

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
Лол, ок.