Added saving of completed tasks
This commit is contained in:
37
main.cpp
37
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 <class ClassesContainer>
|
||||
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 <int BASE>
|
||||
void get_permutations(vector<array<int, BASE>> &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<decltype(shared_function_classes)::iterator> 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user