void readAssignmnet(assignment_node *assignmentList, teacher_node *teacherList, course_node *courseList, char *s) { int teacher_number; int course_number; if (sscanf(s, "A %d %d", &teacher_number, &course_number) > 0){ teacher *myTeacher = get_teacher(teacher_number, teacherList); course *myCourse = get_course(course_number, courseList); assignment *newAssignment = create_assignment(myTeacher, myCourse); add_assignment(assignmentList, newAssignment); } }
int assign_teacher(assignment_node *assignmentList, teacher_node *teacherList, course_node *courseList, int teacher_number, int course_number) { teacher *myTeacher = get_teacher(teacher_number, teacherList); if (myTeacher == NULL) { //student doesn't exist printf("Teacher doesn't exist\n"); return 0; } course *myCourse = get_course(course_number, courseList); if (myCourse == NULL) { //course doesn't exist printf("Course doesn't exist\n"); return 0; } assignment *myAssignment = create_assignment(myTeacher, myCourse); add_enrollment(assignmentList, myAssignment); return 1; }
static list expandtransition(struct trans_object *trans_el, struct net_object *net, struct net_object *unf_net) { struct trans_object *unf_trans; bool Found; struct lisp_object *lisp; struct arc_object *arc, *new_arc, *prev_arc; guard_exprPTR g; arcPTR *parsedArcs; operandPTR op; list arcs, l=NULL, curr=NULL; int i, j, noarc, otd, vtd; multisetPTR p_MS; AssignmentPTR gamma; status state; char *new_var; init_list(&gListParsedArcs); init_list(&YACCParsedVarList); #if DEBUG_UNFOLD printf("Expand transition %s\n\n", trans_el->tag); #endif new_var = FreeVarName(); for (arc = trans_el->arcs, noarc = 0; arc != NULL; arc = arc->next, noarc++); parsedArcs = (arcPTR *) Ecalloc( noarc , sizeof(arcPTR)); init_list(&YACCParsedVarList); i = 0; for( arc = trans_el->arcs; arc != NULL; arc = arc->next){ init_list(&l); if((find_key(gListDomain, (generic_ptr) (arc->place)->tag , CmpDomainName, &l))==OK) { YACCparsedDomain = ((DomainObjPTR) DATA(l)); Found = FALSE; if ( arc->color != NULL ) { for ( lisp = net->lisps; lisp != NULL; lisp = lisp->next){ if(lisp->type=='f' && (strcmp(arc->color, lisp->tag)==0)) { parsedArcs[i++]= ParseArc(lisp->text); Found = TRUE; } } if(Found == FALSE){ parsedArcs[i++]= ParseArc(arc->color); Found = TRUE; } } else if(Found == FALSE && arc->lisp != NULL) parsedArcs[i++]= ParseArc(arc->lisp->text); else parsedArcs[i++]= ParseNoColoredArc(arc, new_var); } else Error(UNDEF_DOM_ERR, "DefTransitions", (arc->place)->tag); } g = ParseGuard(trans_el, net); create_assignment(&gamma, YACCParsedVarList); otd = atoi(opt_list[OPT_ORIZ_TRANS_DISPLACEMENT].arg_val); vtd = atoi(opt_list[OPT_VERT_TRANS_DISPLACEMENT].arg_val); l = NULL; j = 0; init_list(&l); for(state = first_assignment(gamma) ; state != ERROR ; j++) { #if DEBUG_UNFOLD printf("Assignment %s\n%",print_assignment(gamma)); #endif if(eval_guard_expr(g, gamma) == TRUE){ unf_trans = unfolding_transition(trans_el, j, gamma, &(unf_net->rpars)); unf_trans->center.x += j*otd; unf_trans->center.y += j*vtd; head_insert(&l, (generic_ptr) unf_trans); i = 0; for( arc = trans_el->arcs; arc != NULL; arc = arc->next) { #if DEBUG_UNFOLD printf("Arc %s \n", PrintArcExpression(parsedArcs[i])); #endif eval_arc(parsedArcs[i], gamma, &p_MS); arcs = expand_arc(arc, p_MS, parsedArcs[i++]->domain->create_place, unf_net); // destroy_multiset(p_MS); curr = NULL; while ( (curr = list_iterator(arcs, curr)) != NULL ) { new_arc = (struct arc_object *) DATA(curr); if(unf_trans->arcs == NULL) unf_trans->arcs = new_arc; else prev_arc->next = new_arc; prev_arc = new_arc; } // destroy(&arcs, NULL); } } state = next_assignment(gamma); } return(l); }