- 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
- 36
- 37
- 38
- 39
- 40
- 41
- 42
int32 documentColorIndex(DocumentData *document, QString &ext) {
int32 colorIndex = 0;
QString name = document ? (document->name.isEmpty() ? (document->sticker() ? lang(lng_in_dlg_sticker) : qsl("Unknown File")) : document->name) : lang(lng_message_empty);
name = name.toLower();
int32 lastDot = name.lastIndexOf('.');
QString mime = document ? document->mime.toLower() : QString();
if (name.endsWith(qstr(".doc")) ||
name.endsWith(qstr(".txt")) ||
name.endsWith(qstr(".psd")) ||
mime.startsWith(qstr("text/"))
) {
colorIndex = 0;
} else if (
name.endsWith(qstr(".xls")) ||
name.endsWith(qstr(".csv"))
) {
colorIndex = 1;
} else if (
name.endsWith(qstr(".pdf")) ||
name.endsWith(qstr(".ppt")) ||
name.endsWith(qstr(".key"))
) {
colorIndex = 2;
} else if (
name.endsWith(qstr(".zip")) ||
name.endsWith(qstr(".rar")) ||
name.endsWith(qstr(".ai")) ||
name.endsWith(qstr(".mp3")) ||
name.endsWith(qstr(".mov")) ||
name.endsWith(qstr(".avi"))
) {
colorIndex = 3;
} else {
QChar ch = (lastDot >= 0 && lastDot + 1 < name.size()) ? name.at(lastDot + 1) : (name.isEmpty() ? (mime.isEmpty() ? '0' : mime.at(0)) : name.at(0));
colorIndex = (ch.unicode() % 4);
}
ext = document ? ((lastDot < 0 || lastDot + 2 > name.size()) ? name : name.mid(lastDot + 1)) : QString();
return colorIndex;
}
j123123 10.07.2017 14:58 # +1
Но в плюсах такого нет, плюсы - говно!
roman-kashitsyn 10.07.2017 15:22 # +1
Т.е. ты хочешь сказать, что в C++ недостаточно фич?!
Надо просто головой подумать, не нужны тут эти свичи. Если сильно хочется, можно отсортировать списки и искать бинарным поиском, но тут они настолько короткие, что профит вряд ли будет заметен.
j123123 10.07.2017 15:43 # +1
А если надо не
или
а например сделать что-то менее тривиальное, скажем
и чтоб эт не выглядело как ебучая мешанина из std::хуйня<std::параша, говно> а чтоб блядь выглядело как switch?
bormand 10.07.2017 18:48 # 0
roman-kashitsyn 10.07.2017 15:41 # 0
Это ведь выделяет память для создания временных строк?
> QString name = document ? (document->name.isEmpty() ? (document->sticker() ? lang(lng_in_dlg_sticker) : qsl("Unknown File")) : document->name) : lang(lng_message_empty);
Три тернарных оператора в одной строке, какая жесть. Нет бы написать простую функцию, которая вычисляет имя документа из DocumentData*
j123123 10.07.2017 15:49 # +1
bormand 10.07.2017 18:42 # +1
Емнип, Дуров на разработку телеграма как раз олимпиадников и набирал.
Fike 11.07.2017 05:18 # 0
Antervis 10.07.2017 19:09 # 0
Это самопальная функция
> Три тернарных оператора в одной строке, какая жесть
sos 11.07.2017 01:12 # 0
Мне по протобуфу показалось, что у вас там не экономят.
bormand 10.07.2017 18:54 # +1
Т.е. остальные файлы красим почти рандомно, тупо по первой букве расширения или mime типа?
"Заебало эти типы перечислять... Пускай хоть как-то раскрасятся, чтобы нескучно выглядело."
Antervis 10.07.2017 19:14 # +1
j123123 10.07.2017 21:00 # 0
".doc" ".txt" ".psd" ".xls" ".csv" ".pdf" ".ppt" ".key" ".zip" ".rar" ".ai" ".mp3" ".mov" ".avi"
Т.е. все это говно например можно закодировать в uint32_t и потом находить кусок с расширением, и делать switch по uint32_t переменной.
И да, можно регистр всех символов сбросить в нижний регистр ASCII кодировки битовой маской тупо, ну чтоб у нас под ".doc" и ".dOc" не делать отдельный case
j123123 10.07.2017 21:09 # 0
bormand 10.07.2017 21:56 # +1
j123123 10.07.2017 22:22 # 0
Но пока таких расширений там нет, об этом можно не думать.
roman-kashitsyn 10.07.2017 23:52 # +1
j123123 11.07.2017 00:31 # +1
AnalPerOral 11.07.2017 01:13 # 0
Antervis 11.07.2017 05:03 # 0