From 48e918f5009631daccdeba763be016bf9c5201ff Mon Sep 17 00:00:00 2001 From: Aleksey Lobanov Date: Thu, 26 Apr 2018 12:36:53 +0300 Subject: [PATCH] Added saving of completed tasks --- main.cpp | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/main.cpp b/main.cpp index 6eaaffc..024b488 100644 --- a/main.cpp +++ b/main.cpp @@ -24,6 +24,7 @@ using namespace std; const CellType CUR_BASE = 3; const int ARGS_COUNT = 2; +const string CLASSES_FILENAME = "classes.txt"; struct FunctionTask { bool is_finished; @@ -81,6 +82,16 @@ void write_function_class(ofstream &f_out, Iterable begin, Iterable end) { f_out << *begin << " "; f_out << endl; } + +template +void append_classes(const ClassesContainer& classes) { + std::ofstream f_out(CLASSES_FILENAME.c_str(), ios_base::app); + for (const auto& func_class: classes) { + write_function_class(f_out, func_class.begin(), func_class.end()); + } + f_out.close(); +} + /* template void get_permutations(vector> &permutations) { @@ -450,7 +461,10 @@ void process_task_lists() { if ( is_bad_class(task.current, bad_functions) ) { //cout << "bad class" << endl; ++completed_tasks; - print_progress(completed_tasks, total_possible_functions); + if ( print_progress(completed_tasks, total_possible_functions) ) { + append_classes(shared_function_classes); + shared_function_classes.clear(); + } } else { task_mutex.lock(); ++tasks_to_extend; @@ -461,12 +475,17 @@ void process_task_lists() { } else { //cout << "task finished, appending" << endl; ++completed_tasks; - print_progress(completed_tasks, total_possible_functions); + if ( print_progress(completed_tasks, total_possible_functions) ) { + append_classes(shared_function_classes); + shared_function_classes.clear(); + } sort(task.current.begin(), task.current.end()); auto func_class = task.current; bool is_need_append = true; vector functions_to_remove; - for (auto it = shared_function_classes.begin(); it != shared_function_classes.end(); ++it) { + + is_need_append = !is_bad_class(task.current, bad_functions); + /*for (auto it = shared_function_classes.begin(); it != shared_function_classes.end(); ++it) { if ( func_class.size() < it->size() ) { if (includes( it->begin(), @@ -492,7 +511,7 @@ void process_task_lists() { break; } } - } + }*/ if ( is_need_append ) { shared_function_classes.push_back(func_class); for (auto&& func: func_class) @@ -574,6 +593,10 @@ int main() { vector< thread > thread_pool; thread task_processer(process_task_lists); + // удалим старый контент + std::ofstream f_out("classes.txt"); + f_out.close(); + for (int i = 0; i < THREADS_COUNT - 1; ++i) thread_pool.push_back(thread(do_work)); @@ -661,10 +684,6 @@ int main() { new_vector_classes.push_back(*it); swap(new_vector_classes, vector_classes); }*/ - std::ofstream f_out("classes.txt"); - for (const auto& func_class: vector_classes) { - write_function_class(f_out, func_class.begin(), func_class.end()); - } - f_out.close(); + append_classes(vector_classes); return 0; }