- 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
Во-вторых, все последующие комментарии к этому посту оставлены педерастами.
http://www.rusprofile.ru/id/1714222 или это?
P.S. Дядюшка Депп в образе царя сишки на аватарке - символично.
Только бот сравнивает символы по коду. А л и м похожи.
Серную кислотку могу предоставить.
Есть тут один милый джентльмен, нежно любящий Борманда, который очень хочет окунуться полностью.
бьет, значит любит
Где я это написал?
только ты в одной букве опечатался, но сути не меняет
Нет, не был.
Белочка врёт. Стремись к свету.
Зеленые подают в суд на любого, кто стирает белочку в автомате без включения бережной стирки.
http://www.youtube.com/watch?v=aKNrulTtq1Y
Поэтому есть два случая:
1. У тебя жидкие яйца. Этот случай я пока не разбирал.
2. Ты перепутал с "макни", то есть ты хочешь, чтобы твои яйца куда-то макнули, видимо в говно или кислоту.
плюсанул ;)
Если что, слово "трахать" когда-то тоже имело совершенно другое значение - "бить, ударять"; теперь же это значение забыто и заменено на "ебать, чтобы аж перья летели".
кто-нибудь знает штатную тулзу для выявления таких копи-паст?
я сам как-то пару раз чего-то на шеле собирал (плюс для вима макрос для диффа двух фрагментов) но хотелось бы что бы это кто-то за меня написал. в эклипсе может есть какой плагин?
Т.е. сначала производится детальный разбор кода, потом по графу АСТ ищутся "знакомые" алгоритмы, и сравниваются с библиотечными.
Кроме того, можно делать предположения исходя из названий переменных / функций о том, что этим хотел сказать автор, и генерировать программу в надежде на хотя-бы совпадение с исходником.
Как я это вижу взять на генерировать кучу АСТ деревьев базовых алгоритмов до хуища много алгоритмов.
Затем по коду искать куски кода которые будут сходится с теми что есть. Но мне эта задача кажется не выполнимой.
>>>"как их анализировать"
Терморектальным криптоанализом.
Это точно... Иногда такой код бывает, что даже сам автор без паяльника в жопе не объяснит, что оно вообще делает, и что он хотел запилить...
Это в общих чертах о том, как искать. (В очень общих чертах). На самом деле, оптимизирующие компиляторы что-то подобное делают, особенно в языках с подразумеваемым параллелизмом. Например, программист написал цикл, а компилятору этот цикл нужно переделать в создание матрицы определенного размера, заполнения ее данными, получеными врезультате цикла и т.д.
Но это очень сложный процесс. Больше всего похожий даже не на компиляторы, а на пруверы для электроники, типа тех, которыми микрочипы проверяют. Схемы современных микрочипов практически никогда не понятны человеку, они просто очень сложные. Так что там сколько паяльник не суй...
Тут, как бы, кроме идеи нужна еще теоретическая и практическая базы. Нужно сначала доказать, что такое вообще возможно для более-менее нетривиальных ситуаций, и что такие программы не будут, например, выполнятся неделями на ультрасовременном оборудовании.
Можно подробнее?
Например. Но это не самое популярное, что есть.
Есть еще такое:
O. Вспомнил, вот это, самое популярное, наверно:
А еще, когда программы поумнеют, и начнут разможатся самосовершенствуясь (а не просто мутируя)...
Там бинарное дерево не в тему, нужно префиксное