@ProCxx

Страница 756 из 2477
Michael
04.04.2017
10:10:01
да кстати я и не заметил что у меня указатель баффер не инициализирова

по хорошему надо было просто обертку на mbr_state написать и все
я напишу просто обертку над функциями загрузки и дампа скрипта

я напишу просто обертку над функциями загрузки и дампа скрипта
чтобы бизнес-логика не занималась открытиями и закрытиями мруби-контекста

там можно уже и ошибочки обработать, и плохие указатели поймать

Google
Michael
04.04.2017
10:12:50
std::unique_ptr < uint8_t, std::function<void(uint8_t*)>> holder(buffer, [&mbr](uint8_t *buffer) { mrb_free(mrb, buffer); }); за это спасибо, научился

вообще не умею еще с++-указатели, не пользовался. знаю о них и не более

это стандарт?

Anatoly
04.04.2017
10:13:47
но defer стандарными средствами :)

но действительно многолословный

Michael
04.04.2017
10:14:32
щас будет реальн тупой вопрос

[&mbr] что значит этот синтаксис

ничего не понял!

Anatoly
04.04.2017
10:15:17
захват контекта лямбдой

Michael
04.04.2017
10:15:24
а, блин, это лямбда

господи!

Anatoly
04.04.2017
10:15:30
и передача туда ссылки на объект mbr

Google
Michael
04.04.2017
10:15:40
да, все очевидно

тупак

окей, юник поинтер с декструкторм нравится

возьму на вооружение

Шаурма
04.04.2017
10:17:38
Да
масштабирования не вижу, но нужно побороть смещение https://gist.github.com/nib952051/df30e6fea374f54d83768d48031e805d

Michael
04.04.2017
10:19:55
еще по чисто красивостям вопрос

если я хочу по-простому распарсить и трансформировать строку, что шустрее всего - просто пройти по символам в строке записывая каждый в стрингстрим?

кстати я сказал слово трансформировать и дошло что можно написать трансформ

это куда проще

спасибо

(на самом деле мне нужны функции котораые заменяет \r?\n на буквальное "\n" и наоборот)

(регекс ооочччень медленный)

не очень по теме чата, понимаю

это совсем осноовы :)

просто был вопрос как оптимально работать с такими сиутациями и не упустил ли я какой-то магии которая лучше чем копирование в стрингстрим посимвольно

ваще стрингстрим медленный, вроде, если память не проблема, можно просто аллоцировать массив 2хдлины оригинала и копировать в него

так и поступлю



что может быть лучше простых алгоритмов

правда лучше не рефренс а значение в ренже

Google
Дед Пегас
04.04.2017
10:54:20
А если заимплементировать в функциональном стиле?

Dumitru
04.04.2017
10:54:24
А еще лучше конст реф)

Michael
04.04.2017
10:54:45
состязание

я предпочитаю декларативный потому что он быстрый

даже в других языках

babysitter
04.04.2017
10:55:29
А еще лучше конст реф)
для чара зачем реф и тем более конст реф?

Дед Пегас
04.04.2017
10:55:32
str_t это элиас на string?

Michael
04.04.2017
10:55:37
А еще лучше конст реф)
ты об аргументе? да там должен быть конст реф

а я говорил что надо не char &c а char c

чуток побыстрее будет если компилятор не догадается оптимизировать

(инб4 догадается)

str_t это элиас на string?
угу, это стд::стринг

Дед Пегас
04.04.2017
10:56:12
Оки.

А можно текстом кол?

код*

А то с картинки неудобно жуть.

Michael
04.04.2017
10:56:49
да, сейчас

str_t lb_to_lit(const str_t &in) { str_t out(2 * in.length(), '\0'); size_t i = 0; for (char c : in) { if (c == '\r') continue; if (c == '\n') { out[i++] = '\\'; out[i++] = 'n'; continue; } out[i++] = c; } out.resize(i); return out; }

Дед Пегас
04.04.2017
10:57:22
Спасибо.

Google
Alex Фэils?︙
04.04.2017
10:57:37
Просьба всем: не пишите кучу сообщений. Пишите в одном. В крайнем случае можно пропатчить свое сообщение

Michael
04.04.2017
10:58:03
меня сильно портит общение со школьниками

Alex Фэils?︙
04.04.2017
10:58:36
Да оно портит весь интернет, он от него тупеет

Artem
04.04.2017
10:58:55
ты же не любишь инкремент. Почему не пишешь out[i] = '\\'; i += 1;?

babysitter
04.04.2017
10:59:15
Michael
04.04.2017
10:59:49
потому что если есть, то почему бы нет :)

а вот наоборот. немного отличается

str_t lit_to_lb(const str_t &in) { str_t out(in.length(), '\0'); size_t i = 0; for (auto it = in.begin(); it != in.end(); ++it) { if (*it != '\\' || *(it + 1) != 'n') { out[i++] = *it; continue; } out[i++] = '\r'; out[i++] = '\n'; it++; } return out; }

я не проверяю на (it + 1) == in.end(), потому что там нуль-сепаратор, duh

тоже годится

щас еще один алгоритм на замену регекса напишу

Evgeniy
04.04.2017
11:07:51
Почему бы не сделать один switch вместо того чтобы городить ифы?

Michael
04.04.2017
11:08:04
потому что ифов мало и это лаконично и быстро

свитч более громозкий

щас еще один алгоритм на замену регекса напишу
разгоню эту программу раз в пять

большую часть проц. времени жрут два регекса

а не мой код и не дисковые операции

Google
Michael
04.04.2017
11:10:17


я заменю это на мэп

вместо статических полей, они мне не всрались

Дед Пегас
04.04.2017
11:11:56
Тупой вариант влоб

str_t lb_to_lit(const str_t& in) { str_t out; out.reserve(2 * in.length()); auto func = [&out](const str_t::value_type value) { switch(value) { '\n': { out.push_back('\\'); out.push_back('n'); break; } '\r': { out.push_back('\0'); break; } default: { out.push_back(value); } }; }; for_each(begin(in), end(in), func); out.resize(); return out; }

Michael
04.04.2017
11:12:44
ужасно

))

мало того что хрен прочьешь

медленно

и out.push_back('\0') не всрался

там просто брейк

и out.reserve(2 * in.length()); не будет работать

Tema
04.04.2017
11:14:10
там просто брейк
пропатчивай все сообщения в одно

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