- 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
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
void KateQuickOpen::update () {
// пропущено
QModelIndex idxToSelect;
int linecount = 0;
QMapIterator<qint64, KTextEditor::View *> i2(sortedViews);
while (i2.hasNext()) {
i2.next();
KTextEditor::Document *doc = i2.value()->document();
if (alreadySeenDocs.contains(doc))
continue;
alreadySeenDocs.insert (doc);
QStandardItem *itemName = new QStandardItem(doc->documentName());
itemName->setData(qVariantFromValue(QPointer<KTextEditor::Document> (doc)), DocumentRole);
itemName->setData(QString("%1: %2").arg(doc->documentName()).arg(doc->url().pathOrUrl()), SortFilterRole);
itemName->setEditable(false);
QFont font = itemName->font();
font.setBold(true);
itemName->setFont(font);
QStandardItem *itemUrl = new QStandardItem(doc->url().pathOrUrl());
itemUrl->setEditable(false);
base_model->setItem(linecount, 0, itemName);
base_model->setItem(linecount, 1, itemUrl);
linecount++;
if (!doc->url().isEmpty() && doc->url().isLocalFile())
alreadySeenFiles.insert (doc->url().toLocalFile());
// select second document, that is the last used (beside the active one)
if (linecount == 2)
idxToSelect = itemName->index();
}
// get all open documents
QList<KTextEditor::Document*> docs = Kate::application()->documentManager()->documents();
foreach(KTextEditor::Document *doc, docs) {
// skip docs already open
if (alreadySeenDocs.contains (doc))
continue;
QStandardItem *itemName = new QStandardItem(doc->documentName());
itemName->setData(qVariantFromValue(QPointer<KTextEditor::Document> (doc)), DocumentRole);
itemName->setData(QString("%1: %2").arg(doc->documentName()).arg(doc->url().pathOrUrl()), SortFilterRole);
itemName->setEditable(false);
QFont font = itemName->font();
font.setBold(true);
itemName->setFont(font);
QStandardItem *itemUrl = new QStandardItem(doc->url().pathOrUrl());
itemUrl->setEditable(false);
base_model->setItem(linecount, 0, itemName);
base_model->setItem(linecount, 1, itemUrl);
linecount++;
if (!doc->url().isEmpty() && doc->url().isLocalFile())
alreadySeenFiles.insert (doc->url().toLocalFile());
}
// insert all project files, if any project around
if (Kate::PluginView *projectView = m_mainWindow->mainWindow()->pluginView ("kateprojectplugin")) {
QStringList projectFiles = projectView->property ("projectFiles").toStringList();
foreach (const QString &file, projectFiles) {
// skip files already open
if (alreadySeenFiles.contains (file))
continue;
QFileInfo fi (file);
QStandardItem *itemName = new QStandardItem(fi.fileName());
itemName->setData(qVariantFromValue(KUrl::fromPath (file)), UrlRole);
itemName->setData(QString("%1: %2").arg(fi.fileName()).arg(file), SortFilterRole);
itemName->setEditable(false);
QFont font = itemName->font();
font.setBold(true);
itemName->setFont(font);
QStandardItem *itemUrl = new QStandardItem(file);
itemUrl->setEditable(false);
base_model->setItem(linecount, 0, itemName);
base_model->setItem(linecount, 1, itemUrl);
linecount++;
}
}
// swap models and kill old one
m_model->setSourceModel (base_model);
delete m_base_model;
m_base_model = base_model;
// пропущено
}
Адская копипаста. У меня мозг сегфолтится при попытке ее формализировать.
https://projects.kde.org/projects/kde/applications/kate/repository/revisions/master/entry/kate/app/katequickopen.cpp#L135
Konardo 16.02.2014 17:08 # −13
Во-вторых, все последующие комментарии к этому посту оставлены педерастами.
1024-- 16.02.2014 17:34 # −4
http://www.rusprofile.ru/id/1714222 или это?
Stertor 16.02.2014 17:36 # −6
1024-- 16.02.2014 18:25 # −1
P.S. Дядюшка Депп в образе царя сишки на аватарке - символично.
Stertor 16.02.2014 18:49 # −5
1024-- 16.02.2014 19:02 # 0
Konardo 16.02.2014 19:11 # −7
TarasB 16.02.2014 18:01 # −1
Konardo 16.02.2014 18:06 # −8
1024-- 16.02.2014 18:14 # −3
Только бот сравнивает символы по коду. А л и м похожи.
1024-- 16.02.2014 18:11 # −1
Konardo 16.02.2014 18:15 # −8
Серную кислотку могу предоставить.
1024-- 16.02.2014 18:21 # −1
Есть тут один милый джентльмен, нежно любящий Борманда, который очень хочет окунуться полностью.
Konardo 16.02.2014 18:38 # −7
1024-- 16.02.2014 18:48 # −1
Konardo 16.02.2014 18:50 # −7
1024-- 16.02.2014 18:58 # −1
Konardo 16.02.2014 19:00 # −9
Stertor 16.02.2014 19:01 # −5
Elvenfighter 16.02.2014 21:20 # −1
бьет, значит любит
Konardo 16.02.2014 21:28 # −7
Stertor 16.02.2014 21:32 # −5
Konardo 16.02.2014 22:00 # −8
TarasB 16.02.2014 18:39 # −4
Konardo 16.02.2014 18:51 # −7
Где я это написал?
TarasB 16.02.2014 18:56 # −1
только ты в одной букве опечатался, но сути не меняет
Konardo 16.02.2014 19:01 # −8
1024-- 16.02.2014 19:25 # +3
Нет, не был.
Белочка врёт. Стремись к свету.
Konardo 16.02.2014 19:28 # −8
Konardo 16.02.2014 20:55 # −7
Stertor 16.02.2014 21:08 # −4
laMer007 16.02.2014 21:49 # +1
laMer007 17.02.2014 23:09 # −1
Зеленые подают в суд на любого, кто стирает белочку в автомате без включения бережной стирки.
http://www.youtube.com/watch?v=aKNrulTtq1Y
TarasB 17.02.2014 09:45 # +6
Поэтому есть два случая:
1. У тебя жидкие яйца. Этот случай я пока не разбирал.
2. Ты перепутал с "макни", то есть ты хочешь, чтобы твои яйца куда-то макнули, видимо в говно или кислоту.
Stertor 17.02.2014 09:49 # −7
плюсанул ;)
Konardo 17.02.2014 10:12 # −14
Если что, слово "трахать" когда-то тоже имело совершенно другое значение - "бить, ударять"; теперь же это значение забыто и заменено на "ебать, чтобы аж перья летели".
eth0 17.02.2014 19:18 # −3
Konardo 17.02.2014 19:24 # −14
Vasiliy 17.02.2014 19:28 # −2
Konardo 17.02.2014 19:48 # −14
Dummy00001 16.02.2014 17:43 # +3
кто-нибудь знает штатную тулзу для выявления таких копи-паст?
я сам как-то пару раз чего-то на шеле собирал (плюс для вима макрос для диффа двух фрагментов) но хотелось бы что бы это кто-то за меня написал. в эклипсе может есть какой плагин?
wvxvw 16.02.2014 22:49 # +2
Konardo 16.02.2014 23:32 # −20
Vasiliy 17.02.2014 11:37 # +1
Konardo 17.02.2014 11:59 # −14
kipar 17.02.2014 12:06 # +4
Konardo 17.02.2014 12:48 # −12
wvxvw 17.02.2014 18:31 # +2
Т.е. сначала производится детальный разбор кода, потом по графу АСТ ищутся "знакомые" алгоритмы, и сравниваются с библиотечными.
Кроме того, можно делать предположения исходя из названий переменных / функций о том, что этим хотел сказать автор, и генерировать программу в надежде на хотя-бы совпадение с исходником.
Konardo 17.02.2014 18:42 # −11
eth0 17.02.2014 19:19 # +1
Vasiliy 17.02.2014 19:31 # −1
Как я это вижу взять на генерировать кучу АСТ деревьев базовых алгоритмов до хуища много алгоритмов.
Затем по коду искать куски кода которые будут сходится с теми что есть. Но мне эта задача кажется не выполнимой.
Konardo 17.02.2014 19:47 # +3
>>>"как их анализировать"
Терморектальным криптоанализом.
bormand 17.02.2014 19:48 # +1
Это точно... Иногда такой код бывает, что даже сам автор без паяльника в жопе не объяснит, что оно вообще делает, и что он хотел запилить...
wvxvw 17.02.2014 22:30 # +1
Это в общих чертах о том, как искать. (В очень общих чертах). На самом деле, оптимизирующие компиляторы что-то подобное делают, особенно в языках с подразумеваемым параллелизмом. Например, программист написал цикл, а компилятору этот цикл нужно переделать в создание матрицы определенного размера, заполнения ее данными, получеными врезультате цикла и т.д.
Но это очень сложный процесс. Больше всего похожий даже не на компиляторы, а на пруверы для электроники, типа тех, которыми микрочипы проверяют. Схемы современных микрочипов практически никогда не понятны человеку, они просто очень сложные. Так что там сколько паяльник не суй...
Тут, как бы, кроме идеи нужна еще теоретическая и практическая базы. Нужно сначала доказать, что такое вообще возможно для более-менее нетривиальных ситуаций, и что такие программы не будут, например, выполнятся неделями на ультрасовременном оборудовании.
anonimb84a2f6fd141 18.02.2014 17:34 # +1
Можно подробнее?
wvxvw 18.02.2014 19:18 # 0
Например. Но это не самое популярное, что есть.
Есть еще такое:
O. Вспомнил, вот это, самое популярное, наверно:
bormand 17.02.2014 19:45 # +6
TarasB 17.02.2014 19:55 # +9
Konardo 17.02.2014 20:04 # −6
wvxvw 17.02.2014 23:10 # +3
А еще, когда программы поумнеют, и начнут разможатся самосовершенствуясь (а не просто мутируя)...
roman-kashitsyn 18.02.2014 08:47 # 0
TarasB 18.02.2014 09:47 # 0
Там бинарное дерево не в тему, нужно префиксное
Konardo 18.02.2014 10:03 # −5