- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
// https://github.com/telegramdesktop/tdesktop/blob/5f5770dd46491133b135a71fc2d4f92d13107ade/Telegram/SourceFiles/history.cpp#L1455
int History::countUnread(MsgId upTo) {
int result = 0;
for (auto i = blocks.cend(), e = blocks.cbegin(); i != e;) {
--i;
for (auto j = (*i)->items.cend(), en = (*i)->items.cbegin(); j != en;) {
--j;
if ((*j)->id > 0 && (*j)->id <= upTo) {
break;
} else if (!(*j)->out() && (*j)->unread() && (*j)->id > upTo) {
++result;
}
}
}
return result;
}
void History::updateShowFrom() {
if (showFrom) return;
for (auto i = blocks.cend(); i != blocks.cbegin();) {
--i;
for (auto j = (*i)->items.cend(); j != (*i)->items.cbegin();) {
--j;
if ((*j)->id > 0 && (!(*j)->out() || !showFrom)) {
if ((*j)->id >= inboxReadBefore) {
showFrom = *j;
} else {
return;
}
}
}
}
}
j123123 07.11.2017 19:57 # 0
j123123 07.11.2017 20:01 # 0
Нахуя такие циклы делать?
j123123 07.11.2017 20:06 # 0
SemaReal 07.11.2017 20:11 # 0
PVS Studio, CLion, ReSharper for C++... :)
bormand 07.11.2017 20:18 # +2
SemaReal 07.11.2017 21:36 # +1
Но может быть я просто не умею в олимпиаду
bormand 07.11.2017 21:52 # +1
Чем бы дитя не тешилось, лишь бы поля в объектах не называло в духе m.mpx[3].dpx.dx... А i и j в небольших функциях - вполне терпимо.
SemaReal 07.11.2017 21:58 # 0
subaru 07.11.2017 21:52 # 0
bormand 07.11.2017 21:53 # +1
subaru 07.11.2017 21:55 # +1
CaptainPlastid 22.02.2018 21:58 # 0
Можно и лопатой выхватить на код ревью, хотя очевидно его просто нет
Ну и циклы... Циклы тут эпичные, видел код где вместо
Причем это методы - однострочники с условием...
g0_1494089131830 22.02.2018 22:22 # 0
bormand 22.02.2018 22:28 # 0
Но в крестах с их RAII она, конечно, ни к чему.
g0_1494089131830 22.02.2018 22:28 # 0
SemaReal 22.02.2018 22:47 # 0
ахахахахаха
неужели ради #define ?!
g0_1494089131830 22.02.2018 22:47 # 0
bormand 22.02.2018 22:48 # 0
Это, по сути, сишный try ... finally.
g0_1494089131830 22.02.2018 22:48 # 0
Soul_re@ver 22.02.2018 22:50 # +3
g0_1494089131830 22.02.2018 22:50 # 0
bormand 22.02.2018 22:56 # +1
g0_1494089131830 22.02.2018 22:56 # 0
inho 22.02.2018 22:49 # 0
g0_1494089131830 22.02.2018 22:50 # 0
bormand 22.02.2018 23:17 # 0
g0_1494089131830 22.02.2018 23:17 # 0
inho 22.02.2018 23:18 # 0
g0_1494089131830 22.02.2018 23:18 # 0
bormand 22.02.2018 23:20 # 0
g0_1494089131830 22.02.2018 23:20 # 0
inho 22.02.2018 22:36 # 0
Это чтоб наверняка?
g0_1494089131830 22.02.2018 22:36 # 0
inho 22.02.2018 22:45 # 0
g0_1494089131830 22.02.2018 22:45 # 0
inho 22.02.2018 22:46 # 0
g0_1494089131830 22.02.2018 22:46 # 0
bormand 22.02.2018 22:45 # 0
g0_1494089131830 22.02.2018 22:46 # 0
inho 22.02.2018 22:47 # 0
g0_1494089131830 22.02.2018 22:47 # 0
bormand 22.02.2018 22:51 # 0
g0_1494089131830 22.02.2018 22:51 # 0
SemaReal 22.02.2018 23:31 # +1
а в перле был оператор goatse: ``=()=``
g0_1494089131830 22.02.2018 23:31 # 0
SemaReal 22.02.2018 23:32 # 0
g0_1494089131830 22.02.2018 23:32 # 0
SemaReal 22.02.2018 23:33 # 0
g0_1494089131830 22.02.2018 23:33 # 0
SemaReal 22.02.2018 23:33 # 0
g0_1494089131830 22.02.2018 23:33 # 0
SemaReal 22.02.2018 23:32 # 0
g0_1494089131830 22.02.2018 23:32 # 0
SemaReal 22.02.2018 23:33 # 0
g0_1494089131830 22.02.2018 23:33 # 0
SemaReal 22.02.2018 23:33 # 0
g0_1494089131830 22.02.2018 23:33 # 0
SemaReal 22.02.2018 23:34 # +1
g0_1494089131830 22.02.2018 23:34 # 0
SemaReal 22.02.2018 23:34 # 0
1024-- 22.02.2018 23:35 # 0
inho 22.02.2018 23:36 # 0
1024-- 22.02.2018 23:40 # 0
SemaReal 22.02.2018 23:34 # +2
j123123 07.11.2017 20:11 # +1
О да, давайте сначала проверим, равно ли некоторое говно nullptr, и вот если не равно, то тогда присвоим nullptr, а если и так равно, то и присваивать не надо, ОПТИМИЗАЦИЯ
SemaReal 07.11.2017 20:17 # 0
ну может быть оно автогенерённое?
inho 22.02.2018 22:38 # 0
Это ближе к уебанам if (cond) return true; else return false;
g0_1494089131830 22.02.2018 22:38 # 0
subaru 07.11.2017 21:48 # 0
Когда хуяришь быстро-быстро много строк говна, думать над мелочами особо некогда. Только привычки и остаются.
subaru 07.11.2017 21:45 # +1
roman-kashitsyn 07.11.2017 21:57 # +2
Где const?
> auto i = blocks.cend()
не осилили reverse_iterator ?
> (*j)->id <= upTo
Как так, олимпиадники упустили возможность применить бинарный поиск?
bormand 07.11.2017 22:15 # 0
А вдруг у итерации по blocks есть побочные эффекты (типа подкачки с флешки/сервера)?
SemaReal 07.11.2017 22:19 # 0
roman-kashitsyn 07.11.2017 22:28 # 0
mutable же
subaru 07.11.2017 22:00 # 0
j123123 07.11.2017 22:45 # 0
Нахрена делать такой for() ? В цикле в for () обычно что-то уменьшают-увеличивают, ну типа:
Тут же этот i уменьшается не в for(тут) а в самом теле цикла. Зачем? Зачем делать for в котором нихрена не меняется внутри круглых скобок?
roman-kashitsyn 07.11.2017 22:46 # 0
> for (int i = 14; i >= 0; i--)
а теперь замени int на uint, раз всё так просто
j123123 07.11.2017 23:02 # 0
А что им мешало сделать например так:
for(auto i = blocks.cend() - 1
bormand 07.11.2017 23:03 # 0
j123123 07.11.2017 23:06 # 0
if( blocks.cend() != blocks.cbegin() )
j123123 07.11.2017 23:12 # 0
вообще да, если уж не знать про reverse_iterator, правильнее будет какой-нибудь while использовать
Когда я вижу for(), я ожидаю что в круглых скобочках этого for() будет происходить некая хрень, меняющая то, из-за чего условие в for() должно перестать работать
bormand 07.11.2017 23:23 # +2
И у тебя i и e вывалятся наружу, а с for'ом они были локальными для тела цикла...
З.Ы. Хотя фишка из нового стандарта вроде позволит написать как-то так:
bormand 07.11.2017 23:38 # 0
SemaReal 07.11.2017 23:39 # +1
bormand 07.11.2017 23:42 # 0
SemaReal 07.11.2017 23:56 # +1
а у нас
а мы
bormand 08.11.2017 00:17 # +4
В общем, скучно в этом вашем ruby.
SemaReal 08.11.2017 00:25 # 0
cм "для скучных"
>>по-крестовому через итераторы, п
>>через for-по-контейнеру,
см "для педантов"
>>по-функциональному через алгоритмы
ну там сверху три примерчика же
В общем руби не хуже крестов, если конечно сравнивать их по такому важному параметрку как количество ебанутых способов обойти коллекцию
bormand 08.11.2017 00:35 # +2
Да и лямбду описать у вас всего жалкая пара способов.
А где аналог варианта с goto?
Нету в вашем руби простора для самовыражения.
SemaReal 08.11.2017 00:58 # +2
Обижаешь! Это же руби, тут всего по четыре способа
>>А где аналог варианта с goto?
Держись за стул: https://rubygems.org/gems/goto
Category: Library/Evil
bormand 08.11.2017 20:09 # +4
- указатель на функцию, как в няшной
- функторы аля класс-с-оператором-скобки
- каррирование и кобенирование через bind
- бустовая магия _1 < _2
- настоящие лямбды из нового стандарта
Каждый способ по-своему уникален.
SemaReal 08.11.2017 22:30 # 0
roman-kashitsyn 08.11.2017 00:33 # 0
SemaReal 08.11.2017 00:34 # 0
bormand 08.11.2017 00:41 # 0
SemaReal 08.11.2017 00:54 # 0
индексация +1 за пределом области памяти вернет NULL, или туда надо явно положить NULL?
Предок-то он может и предок, то физически ведь получается тоже самое
адрес начала массива (указатель) плюс сдвиг размером с тип данных, умножить на индекс
bormand 08.11.2017 00:57 # +1
Совсем люди позабыли об основах со своими языками высокого уровня...
SemaReal 08.11.2017 01:00 # 0
bormand 08.11.2017 01:05 # 0
SemaReal 08.11.2017 01:11 # 0
правда за такое уже пиздят, конечно.
И RubyMine и RuboCop верещат на такой код
j123123 08.11.2017 09:48 # 0
http://govnokod.ru/19105 можно даже с goto без if
j123123 08.11.2017 07:39 # +1
Можно еще сверху все обернуть фигурными скобками, чтоб не ВЫВАЛИВАЛОСЬ
Antervis 08.11.2017 08:52 # +1
j123123 08.11.2017 09:34 # +1
j123123 08.11.2017 09:39 # 0
Antervis 08.11.2017 09:52 # 0
j123123 08.11.2017 10:22 # +1
Antervis 08.11.2017 11:59 # +2
j123123 08.11.2017 12:12 # +1
1024-- 08.11.2017 16:26 # 0
Antervis 08.11.2017 17:29 # −1
Пусть только "Java/C#/PHP - не важно, главное - популярный язык" сначала компилироваться начнет
> когда уже у программистов погорят языки и библиотеки, чтоб пожарные шланги модулей наконец унифицировали?
Специально для тебя могут унифицировать охлажденные дилдаки.
1024-- 08.11.2017 18:16 # 0
Java/C# не просто компилируемые, а дважды компилируемые. Разве этого мало?
> Специально для тебя могут унифицировать охлажденные дилдаки.
Что за питушню я читаю?
Открою страшную правду тем, кто долго сидел в интернетах, что пожарный шланг - это часть оборудования для тушения огня, а не термин с порносайта.
Ситуация в Интернете стала напоминать время, когда в начале XX века в США пожарные шланги в каждом городе были сделаны по-своему. Это приводил к тому, что пожарные из соседнего города не могли помочь в случае серьёзного пожара.
В. Соломенчук. Понятный самоучитель Интернет. Питер, 2008. с. 188
d_fomenok 08.11.2017 19:24 # 0
Как вообще так можно было сделать?
1024-- 08.11.2017 19:37 # 0
Время было другое, наверно не продумали всё.
Вон у нас до сих пор наличными расплачиваются, а люди будущего будут удивляться, как же не лень было нам считать сраные копейки и пердолиться со сдачей, когда достаточно было получать всё нужное сразу в холодильник или просто взять из магазина нужный товар и пойти домой, максимум - дедовским способом поднести телефон к терминалу у бабушки на улице.
Stallman 08.11.2017 11:32 # 0
inkanus-gray 08.11.2017 09:41 # 0
j123123 08.11.2017 09:42 # 0
j123123 07.11.2017 22:53 # 0
и
В первом случае делается переменная e, которой присваиваем blocks.cbegin(), во втором же никакой переменной e не создается. Почему и там и там не сделать каким-нибудь одним способом? Например, если получение blocks.cbegin() это какая-то там операция, которая не может быть соптимизирована (т.е. если компилятор не может доказать, что cbegin на каждой итерации данного сраного цикла будет все тем же) то и там и там сделайте e = blocks.cbegin() хуйню
Antervis 08.11.2017 06:43 # −1