bool OrderedTask::Replace(const OrderedTaskPoint &new_tp, const unsigned position) { if (position >= task_points.size()) return false; if (task_points[position]->Equals(new_tp)) // nothing to do return true; /* is the new_tp allowed in this context? */ if ((position > 0 && !new_tp.IsPredecessorAllowed()) || (position + 1 < task_points.size() && !new_tp.IsSuccessorAllowed())) return false; delete task_points[position]; task_points[position] = new_tp.Clone(task_behaviour, ordered_behaviour); if (position) SetNeighbours(position - 1); SetNeighbours(position); if (position + 1 < task_points.size()) SetNeighbours(position + 1); UpdateGeometry(); return true; }
bool OrderedTask::Insert(const OrderedTaskPoint &new_tp, const unsigned position) { if (position >= task_points.size()) return Append(new_tp); if (/* is the new_tp allowed in this context? */ (position > 0 && !new_tp.IsPredecessorAllowed()) || !new_tp.IsSuccessorAllowed() || /* can a tp be inserted at this position? */ (position > 0 && !task_points[position - 1]->IsSuccessorAllowed()) || !task_points[position]->IsPredecessorAllowed()) return false; if (active_task_point >= position) active_task_point++; task_points.insert(task_points.begin() + position, new_tp.Clone(task_behaviour, ordered_behaviour)); if (position) SetNeighbours(position - 1); SetNeighbours(position); SetNeighbours(position + 1); UpdateGeometry(); return true; }