Browse Source

Changed Source::View::views type to std::unordered_set<Source::View*>

merge-requests/365/head
eidheim 8 years ago
parent
commit
f45f871156
  1. 6
      src/source.cc
  2. 2
      src/source.h
  3. 46
      src/source_clang.cc

6
src/source.cc

@ -85,11 +85,11 @@ std::string Source::FixIt::string(Glib::RefPtr<Gtk::TextBuffer> buffer) {
//// View //// //// View ////
////////////// //////////////
std::unordered_set<Source::View*> Source::View::non_deleted_views; std::unordered_set<Source::View*> Source::View::non_deleted_views;
std::map<boost::filesystem::path, Source::View*> Source::View::views; std::unordered_set<Source::View*> Source::View::views;
Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtr<Gsv::Language> language): Gsv::View(), SpellCheckView(), DiffView(file_path), language(language), status_diagnostics(0, 0, 0) { Source::View::View(const boost::filesystem::path &file_path, Glib::RefPtr<Gsv::Language> language): Gsv::View(), SpellCheckView(), DiffView(file_path), language(language), status_diagnostics(0, 0, 0) {
non_deleted_views.emplace(this); non_deleted_views.emplace(this);
views.emplace(file_path, this); views.emplace(this);
load(); load();
@ -917,7 +917,7 @@ Source::View::~View() {
renderer_activate_connection.disconnect(); renderer_activate_connection.disconnect();
non_deleted_views.erase(this); non_deleted_views.erase(this);
views.erase(file_path); views.erase(this);
} }
void Source::View::search_highlight(const std::string &text, bool case_sensitive, bool regex) { void Source::View::search_highlight(const std::string &text, bool case_sensitive, bool regex) {

2
src/source.h

@ -41,7 +41,7 @@ namespace Source {
class View : public SpellCheckView, public DiffView { class View : public SpellCheckView, public DiffView {
public: public:
static std::unordered_set<View*> non_deleted_views; static std::unordered_set<View*> non_deleted_views;
static std::map<boost::filesystem::path, View*> views; static std::unordered_set<View*> views;
View(const boost::filesystem::path &file_path, Glib::RefPtr<Gsv::Language> language); View(const boost::filesystem::path &file_path, Glib::RefPtr<Gsv::Language> language);
~View(); ~View();

46
src/source_clang.cc

@ -41,7 +41,7 @@ bool Source::ClangViewParse::save() {
if(language->get_id()=="chdr" || language->get_id()=="cpphdr") { if(language->get_id()=="chdr" || language->get_id()=="cpphdr") {
for(auto &view: views) { for(auto &view: views) {
if(auto clang_view=dynamic_cast<Source::ClangView*>(view.second)) { if(auto clang_view=dynamic_cast<Source::ClangView*>(view)) {
if(this!=clang_view) if(this!=clang_view)
clang_view->soft_reparse_needed=true; clang_view->soft_reparse_needed=true;
} }
@ -707,8 +707,8 @@ Source::ClangViewRefactor::ClangViewRefactor(const boost::filesystem::path &file
std::vector<clangmm::TranslationUnit*> translation_units; std::vector<clangmm::TranslationUnit*> translation_units;
translation_units.emplace_back(clang_tu.get()); translation_units.emplace_back(clang_tu.get());
for(auto &view: views) { for(auto &view: views) {
if(view.second!=this) { if(view!=this) {
if(auto clang_view=dynamic_cast<Source::ClangView*>(view.second)) if(auto clang_view=dynamic_cast<Source::ClangView*>(view))
translation_units.emplace_back(clang_view->clang_tu.get()); translation_units.emplace_back(clang_view->clang_tu.get());
} }
} }
@ -720,22 +720,28 @@ Source::ClangViewRefactor::ClangViewRefactor(const boost::filesystem::path &file
std::vector<Usages::Clang::Usages*> usages_renamed; std::vector<Usages::Clang::Usages*> usages_renamed;
for(auto &usage: usages) { for(auto &usage: usages) {
size_t line_c=usage.lines.size()-1; size_t line_c=usage.lines.size()-1;
auto view_it=views.find(usage.path); auto view_it=views.end();
for(auto it=views.begin();it!=views.end();++it) {
if((*it)->file_path==usage.path) {
view_it=it;
break;
}
}
if(view_it!=views.end()) { if(view_it!=views.end()) {
view_it->second->get_buffer()->begin_user_action(); (*view_it)->get_buffer()->begin_user_action();
for(auto offset_it=usage.offsets.rbegin();offset_it!=usage.offsets.rend();++offset_it) { for(auto offset_it=usage.offsets.rbegin();offset_it!=usage.offsets.rend();++offset_it) {
auto start_iter=view_it->second->get_buffer()->get_iter_at_line_index(offset_it->first.line-1, offset_it->first.index-1); auto start_iter=(*view_it)->get_buffer()->get_iter_at_line_index(offset_it->first.line-1, offset_it->first.index-1);
auto end_iter=view_it->second->get_buffer()->get_iter_at_line_index(offset_it->second.line-1, offset_it->second.index-1); auto end_iter=(*view_it)->get_buffer()->get_iter_at_line_index(offset_it->second.line-1, offset_it->second.index-1);
view_it->second->get_buffer()->erase(start_iter, end_iter); (*view_it)->get_buffer()->erase(start_iter, end_iter);
start_iter=view_it->second->get_buffer()->get_iter_at_line_index(offset_it->first.line-1, offset_it->first.index-1); start_iter=(*view_it)->get_buffer()->get_iter_at_line_index(offset_it->first.line-1, offset_it->first.index-1);
view_it->second->get_buffer()->insert(start_iter, text); (*view_it)->get_buffer()->insert(start_iter, text);
if(offset_it->first.index-1<usage.lines[line_c].size()) if(offset_it->first.index-1<usage.lines[line_c].size())
usage.lines[line_c].replace(offset_it->first.index-1, offset_it->second.index-offset_it->first.index, text); usage.lines[line_c].replace(offset_it->first.index-1, offset_it->second.index-offset_it->first.index, text);
--line_c; --line_c;
} }
view_it->second->get_buffer()->end_user_action(); (*view_it)->get_buffer()->end_user_action();
view_it->second->save(); (*view_it)->save();
renamed_views.emplace_back(view_it->second); renamed_views.emplace_back(*view_it);
usages_renamed.emplace_back(&usage); usages_renamed.emplace_back(&usage);
} }
else { else {
@ -907,7 +913,7 @@ Source::ClangViewRefactor::ClangViewRefactor(const boost::filesystem::path &file
//First, look for a definition cursor that is equal //First, look for a definition cursor that is equal
auto identifier_usr=identifier.cursor.get_usr(); auto identifier_usr=identifier.cursor.get_usr();
for(auto &view: views) { for(auto &view: views) {
if(auto clang_view=dynamic_cast<Source::ClangView*>(view.second)) { if(auto clang_view=dynamic_cast<Source::ClangView*>(view)) {
for(auto &token: *clang_view->clang_tokens) { for(auto &token: *clang_view->clang_tokens) {
auto cursor=token.get_cursor(); auto cursor=token.get_cursor();
auto cursor_kind=cursor.get_kind(); auto cursor_kind=cursor.get_kind();
@ -1099,8 +1105,8 @@ Source::ClangViewRefactor::ClangViewRefactor(const boost::filesystem::path &file
std::vector<clangmm::TranslationUnit*> translation_units; std::vector<clangmm::TranslationUnit*> translation_units;
translation_units.emplace_back(clang_tu.get()); translation_units.emplace_back(clang_tu.get());
for(auto &view: views) { for(auto &view: views) {
if(view.second!=this) { if(view!=this) {
if(auto clang_view=dynamic_cast<Source::ClangView*>(view.second)) if(auto clang_view=dynamic_cast<Source::ClangView*>(view))
translation_units.emplace_back(clang_view->clang_tu.get()); translation_units.emplace_back(clang_view->clang_tu.get());
} }
} }
@ -1456,7 +1462,7 @@ void Source::ClangViewRefactor::wait_parsing() {
std::unique_ptr<Dialog::Message> message; std::unique_ptr<Dialog::Message> message;
std::vector<Source::ClangView*> clang_views; std::vector<Source::ClangView*> clang_views;
for(auto &view: views) { for(auto &view: views) {
if(auto clang_view=dynamic_cast<Source::ClangView*>(view.second)) { if(auto clang_view=dynamic_cast<Source::ClangView*>(view)) {
if(!clang_view->parsed) { if(!clang_view->parsed) {
clang_views.emplace_back(clang_view); clang_views.emplace_back(clang_view);
if(!message) if(!message)
@ -1568,11 +1574,11 @@ void Source::ClangView::async_delete() {
delayed_tag_similar_identifiers_connection.disconnect(); delayed_tag_similar_identifiers_connection.disconnect();
parsing_in_progress->cancel("canceled, freeing resources in the background"); parsing_in_progress->cancel("canceled, freeing resources in the background");
views.erase(file_path); views.erase(this);
std::set<boost::filesystem::path> project_paths_in_use; std::set<boost::filesystem::path> project_paths_in_use;
for(auto &view: views) { for(auto &view: views) {
if(dynamic_cast<ClangView*>(view.second)) { if(dynamic_cast<ClangView*>(view)) {
auto build=Project::Build::create(view.first); auto build=Project::Build::create(view->file_path);
if(!build->project_path.empty()) if(!build->project_path.empty())
project_paths_in_use.emplace(build->project_path); project_paths_in_use.emplace(build->project_path);
} }

Loading…
Cancel
Save