/***********************************************************************/ /* Course: Computer Science 402a */ /* Assignment: Assignment 2 */ /* Instructor: Mark Giesbrecht */ /* Submitted by: Dan Fraser */ /* Student Number: 001219229 */ /* Due Date: Wednesday, February 16 */ /***********************************************************************/ /* Busy.cc - Implementation for the schedule/busy class */ /***********************************************************************/ /* see Busy.h for detailed docs */ #include "Busy.h" #define TEMPSIZE 1024 Busy::Busy() { for (int i = 0; i < DAYLEN; i++) { meetings[i] = NULL; } } bool Busy::allocate(Meeting *meeting, int start, int length) { for (int i = start; i < start+length; i++) { meetings[i] = meeting; } return 1; } bool Busy::deallocate(int start, int length) { for (int i = start; i < start+length; i++) { if (meetings[i] == NULL) { return 0; } } delete(meetings[start]); for (int i = start; i < start+length; i++) { meetings[i]=NULL; } return 1; } bool Busy::deallocate(Meeting *meeting) { int did_something = 0; for (int i = 0; i< DAYLEN; i++) { if (meetings[i] == meeting) { meetings[i] = NULL; did_something = 1; } } return did_something; } bool Busy::check(Busy busylist) { for (int i = 0; i < DAYLEN; i++) { if (meetings[i] && busylist.meetings[i]) { cout << "conflict found at time " << i << endl; return 0; } } return 1; } bool Busy::check(int start, int length) { for (int i = start; i < start+length; i++) { if (meetings[i] != NULL) { cout << "conflict found at time " << i << endl; return 0; } } return 1; } void Busy::print() { for (int i; i < DAYLEN; i++) { Meeting *current_meeting; vector *attendees; if (meetings[i] != NULL) { cout << i << ": " << "start: " << realTime(meetings[i]->getStart()); cout << ", length: " << meetings[i]->getLength() * 15 << " minutes"; attendees = meetings[i]->getAttendees(); if (attendees->size()) { cout << ", attended by (uids): "; for(vector::iterator p = attendees->begin(); p != attendees->end(); p++) { cout << *p << " "; } } cout << endl; } } } string Busy::realTime(int time) { char temp[TEMPSIZE]; int minute; int day, hour; string temp_str; string days[] = {"Monday","Tuesday","Wednesday","Thursday","Friday"}; minute = (time % 4) * 15; hour = 8+(floor((time % 32) / 4)); day = (int) rint(ceil((time / 32))); temp_str = days[day]; sprintf(temp," %02d:%02d",hour,minute); temp_str += temp; return temp_str; }