#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define BUF_SIZE 20

struct frame {
    int size;
    int priority;
};

//we sort based on priority first, then on size
//higher number is higher priority. lower size
//gets preference.

int main() {

    struct frame buffer[BUF_SIZE];
    struct frame temp;
    int i, j, minp;

    //randomly fill the buffer
    srandom (time(NULL));
    for (i = 0; i < BUF_SIZE; i++) {
	//lets have a size between 5 and 10
	buffer[i].size = random()%6 + 5;
	//and a priority ranging from 0-50
	buffer[i].priority = random()%51;
    }
    printf ("Raw buffer:\n");
    for (i = 0; i < BUF_SIZE; i++)
	printf ("Size:%2d\tPriority: %2d\n", buffer[i].size, buffer[i].priority);

    //do selection sort
    for (i = 0; i < BUF_SIZE; i++) {
	minp = i;
	for (j = i+1; j < BUF_SIZE; j++) {
	    if (buffer[j].priority > buffer[minp].priority)
		minp = j;
	    else if (buffer[j].priority == buffer[minp].priority)
		if (buffer[j].size < buffer[minp].size)
		    minp = j;
	}
	
	temp = buffer[i];
	buffer[i] = buffer[minp];
	buffer[minp] = temp;
    }

    printf ("Sorted buffer:\n");
    for (i = 0; i < BUF_SIZE; i++)
	printf ("Size:%2d\tPriority: %2d\n", buffer[i].size, buffer[i].priority);

    return 0;
}
