Compare commits

...

2 Commits

Author SHA1 Message Date
9752ef451f Cleanup 2023-12-02 23:14:09 -04:00
42cb09f3bd Pass tests without introducing new function 2023-12-02 23:12:22 -04:00
3 changed files with 21 additions and 20 deletions

View File

@ -57,10 +57,6 @@ void delete(DiskQueue *queue, DiskRequest request) {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
DiskRequest peek(DiskQueue *queue) {
return *queue->head;
}
DiskRequest *dequeue(DiskQueue *queue) { DiskRequest *dequeue(DiskQueue *queue) {
DiskRequest *head = queue->head; DiskRequest *head = queue->head;
queue->head = head->next; queue->head = head->next;
@ -81,26 +77,34 @@ void destroyDiskQueue(DiskQueue *queue) {
DiskRequest* findClosest(DiskQueue *queue, int position, double time) { DiskRequest* findClosest(DiskQueue *queue, int position, double time) {
DiskRequest *current = queue->head; DiskRequest *current = queue->head;
DiskRequest *closest = NULL; DiskRequest *next = NULL;
DiskRequest *first = NULL;
while (current != NULL) { while (current != NULL) {
if (current->time <= time) { // Filter out requests that haven't come in yet if (current->time <= time) { // Filter out requests that haven't come in yet
if (closest == NULL) { // If there is no closest yet, set it to the current if (first == NULL) {
closest = current; first = current;
} else { } else {
int closestDistance = closest->position - position; // Distance from the closest to the current position, negative means down (bad) if (current->position < first->position) {
int currentDistance = current->position - position; // Distance from the current to the current position, negative means down (bad) first = current;
if (currentDistance > 0) { // If the current is up }
if (currentDistance < closestDistance) { // If the current is closer than the closest }
closest = current; int currentDistance = current->position - position; // Distance from the current to the current position, negative means down (bad)
if (currentDistance > 0) { // If the current is up
if (next == NULL) { // If there is no next yet, set it to the current
next = current;
} else {
int nextDistance = next->position - position; // Distance from the next to the current position, negative means down (bad)
if (currentDistance < nextDistance) { // If the current is closer than the next
next = current;
} }
} }
} }
} }
current = current->next; current = current->next;
} }
// Bad // If we didn't find a request that is above the current position, return the first as a fallback
if (closest == NULL) { if (next == NULL) {
return NULL; return first;
} }
return closest; return next;
} }

View File

@ -21,8 +21,6 @@ void enqueue(DiskQueue *queue, int time, int position);
void delete(DiskQueue *queue, DiskRequest request); void delete(DiskQueue *queue, DiskRequest request);
DiskRequest peek(DiskQueue *queue);
DiskRequest *dequeue(DiskQueue *queue); DiskRequest *dequeue(DiskQueue *queue);
DiskRequest *findClosest(DiskQueue *queue, int position, double time); DiskRequest *findClosest(DiskQueue *queue, int position, double time);

View File

@ -68,7 +68,6 @@ void cscan(int start) {
if (request != NULL) { if (request != NULL) {
delete(queue, *request); delete(queue, *request);
} }
//printf("Movement: %i Time:%.1lf\n", movement, seekTime);
} }
} }
@ -93,4 +92,4 @@ int main(int argc, char **argv) {
destroyDiskQueue(queue); destroyDiskQueue(queue);
return 0; return 0;
} }