summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbpodgursky <bpodgursky@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-07-06 18:43:01 +0000
committerbpodgursky <bpodgursky@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-07-06 18:43:01 +0000
commit2255cb657ebb122aa8b9f276e6de140a9a825773 (patch)
treee919b2a868fa8e2e5dad056e1f62a745608d44ba
parent5dd4c9694a0e46b9871b1f81d6d88c8ab56d9857 (diff)
downloadATCD-2255cb657ebb122aa8b9f276e6de140a9a825773.tar.gz
Mon Jul 6 18:42:01 UTC 2009 Ben Podgursky <bpodgursky@gmail.com>
-rw-r--r--ChangeLog8
-rw-r--r--SA_WorkingPlan.cpp71
2 files changed, 60 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog
index adbe154735d..4f539e2c2bf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,14 @@
+Mon Jul 6 18:42:01 UTC 2009 Ben Podgursky <bpodgursky@gmail.com>
+
+ * SA_WorkingPlan.cpp:
+
+ Started gettign rid of ordering links and using precedence graph.
+
Thu Jul 2 16:36:11 UTC 2009 Ben Podgursky <bpodgursky@gmail.com>
* SA_WorkingPlan.cpp:
- Resolve CL threat fails if it is asked to schedule something before 20.
+ Resolve CL threat fails if it is asked to schedule something before 20.
Thu Jul 2 05:38:02 UTC 2009 Ben Podgursky <bpodgursky@gmail.com>
diff --git a/SA_WorkingPlan.cpp b/SA_WorkingPlan.cpp
index 70e17b75d70..ae786f2f760 100644
--- a/SA_WorkingPlan.cpp
+++ b/SA_WorkingPlan.cpp
@@ -244,7 +244,7 @@ this->init_end.insert(std::make_pair(32,(TimeWindow)std::make_pair(NULL_TIME,NUL
*/
-for(int i = 0; i < 100; i++){
+for(int i = 0; i < 2; i++){
this->init_start.insert(std::make_pair(i,(TimeWindow)std::make_pair(NULL_TIME,NULL_TIME)));
this->init_end.insert(std::make_pair(i,(TimeWindow)std::make_pair(NULL_TIME,NULL_TIME)));
}
@@ -295,7 +295,7 @@ void SA_WorkingPlan::reset_plan ()
this->precedence_graph_.insert(std::make_pair(SIMUL,temp));
this->precedence_graph_.insert(std::make_pair(UNRANKED,temp));
-
+ /*
this->init_start.insert(std::make_pair(1,(TimeWindow)std::make_pair(NULL_TIME,NULL_TIME)));
this->init_end.insert(std::make_pair(1,(TimeWindow)std::make_pair(NULL_TIME,NULL_TIME)));
@@ -364,7 +364,7 @@ this->init_end.insert(std::make_pair(31,(TimeWindow)std::make_pair(NULL_TIME,NUL
this->init_start.insert(std::make_pair(32,(TimeWindow)std::make_pair(NULL_TIME,NULL_TIME)));
this->init_end.insert(std::make_pair(32,(TimeWindow)std::make_pair(NULL_TIME,NULL_TIME)));
-
+*/
}
// Set goal.
@@ -1139,9 +1139,6 @@ bool SA_WorkingPlan::execute (SA_ResolveCLThreatCmd * cmd)
{
std::ostringstream debug_text;
-
-
-
TaskInstID first_task_inst = cmd->first;
@@ -1153,16 +1150,7 @@ bool SA_WorkingPlan::execute (SA_ResolveCLThreatCmd * cmd)
this->reverse_ordering_links.insert(std::pair<TaskInstID, TaskInstID>(second_task_inst, first_task_inst));
cmd->got_to_change_precedences = true;
- if(is_cycle_in_ordering() ){
- debug_text << "SA_WorkingPlan::execute (SA_ResolveCLThreatCmd * cmd): Cannot schedule task inst"<<cmd->first<<" before task inst"<<cmd->second<<std::endl;
- SA_POP_DEBUG_STR (SA_POP_DEBUG_NORMAL, debug_text.str ());
- debug_text.clear();
-
-
- cmd->got_to_change_precedences = false;
- return false;
- }
if(task_insts_.find(cmd->second)->second == 20){
@@ -1174,6 +1162,15 @@ bool SA_WorkingPlan::execute (SA_ResolveCLThreatCmd * cmd)
return false;
}
+ if(cmd->first == -1){
+
+ debug_text << "SA_WorkingPlan::execute (SA_ResolveCLThreatCmd * cmd): Cannot push threat to after goal"<<std::endl;
+ SA_POP_DEBUG_STR (SA_POP_DEBUG_NORMAL, debug_text.str ());
+ debug_text.clear();
+
+ cmd->got_to_change_precedences = false;
+ return false;
+ }
PrecedenceSet* befores = &this->precedence_graph_.find(BEFORE)->second;
PrecedenceSet* afters = &this->precedence_graph_.find(AFTER)->second;
@@ -1201,8 +1198,15 @@ bool SA_WorkingPlan::execute (SA_ResolveCLThreatCmd * cmd)
before_B->insert(cmd->first);
unranked_B->erase(cmd->first);
+ bool loop_detected = false;
+
for(TaskInstSet::iterator it = before_A->begin(); it != before_A->end(); it++){
- before_B->insert(*it);
+
+ if(after_B->find(*it) != after_B->end()){
+ loop_detected = true;
+ }
+
+ before_B->insert(*it);
unranked_B->erase(*it);
afters->find(*it)->second.insert(cmd->second);
@@ -1213,17 +1217,40 @@ bool SA_WorkingPlan::execute (SA_ResolveCLThreatCmd * cmd)
unranked_A->erase(cmd->second);
for(TaskInstSet::iterator it = after_B->begin(); it != after_B->end(); it++){
- after_A->insert(*it);
+
+ if(before_A->find(*it) != before_A->end()){
+ loop_detected = true;
+ }
+
+ after_A->insert(*it);
unranked_A->erase(*it);
befores->find(*it)->second.insert(cmd->first);
unrankeds->find(*it)->second.erase(cmd->first);
}
+ if(loop_detected){
+
+ debug_text << "SA_WorkingPlan::execute (SA_ResolveCLThreatCmd * cmd): Cannot schedule task inst"<<cmd->first<<" before task inst"<<cmd->second<<std::endl;
+ SA_POP_DEBUG_STR (SA_POP_DEBUG_NORMAL, debug_text.str ());
+ debug_text.clear();
+
+
+ if(!this->is_cycle_in_ordering()){
+ bool this_means_ben_failed = true;
+ }
+
+ return false;
+ }
+
+ if(is_cycle_in_ordering()){
+ bool this_means_ben_failed = true;
+ }
+
+
debug_text << "SA_WorkingPlan::execute (SA_ResolveCLThreatCmd * cmd): Now scheduling task "<<cmd->first<<" before "<<cmd->second<<std::endl;
SA_POP_DEBUG_STR (SA_POP_DEBUG_NORMAL, debug_text.str ());
debug_text.clear();
-
@@ -1944,6 +1971,14 @@ bool SA_WorkingPlan::init_prec_insert(TaskInstID task_inst, SA_AssocTaskImplCmd
this->precedence_graph_.find(UNRANKED)->second.insert(std::make_pair(task_inst,temp));
this->precedence_graph_.find(SIMUL)->second.insert(std::make_pair(task_inst,temp));
+
+ if(init_start.size() == task_inst){
+ for(int i = init_start.size(); i < 100+task_inst; i++){
+ this->init_start.insert(std::make_pair(i,(TimeWindow)std::make_pair(NULL_TIME,NULL_TIME)));
+ this->init_end.insert(std::make_pair(i,(TimeWindow)std::make_pair(NULL_TIME,NULL_TIME)));
+ }
+ }
+
TimeWindow win_start = this->init_start.find(task_inst)->second;
TimeWindow win_end = this->init_end.find(task_inst)->second;
TimeWindow start_win = this->get_start_window(task_inst);