-
Notifications
You must be signed in to change notification settings - Fork 0
/
output.c
67 lines (62 loc) · 1.88 KB
/
output.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/**
* CITS3402: High Performance Computing Project 2
* Parallel algorithms to solve all pair shortest path
*
* Clarifications
* The program will automatically generate an ouput file.
* The ouput file will be in binary.
* The program requires the -f flag to specify the input file.
*
* @author Bruce How (22242664)
* @date 25/10/2019
*/
#include "spath.h"
/**
* Produces the output filename by extracting the input
* filename (omitting any leading directories) and appending
* the appropriate file extension.
*
* @param filename The input filename
* @return char* The new output filename
*/
char *get_filename(char *filename) {
// Strip directory slashes if any
int index = 0;
int len = strlen(filename);
for (int i = len; i >= 0; i--) {
if (filename[i] == '/') {
index = i + 1;
}
}
// Perform .in to .out conversion
char *result = allocate((len - index + 1) * sizeof(char));
int i = 0;
while (filename[index] != '.') {
result[i++] = filename[index++];
}
strncpy(&result[i], ".out", 4 * sizeof(char));
result[i+4] = '\0';
return result;
}
/**
* Output the results of a list of shortest paths in binary to a
* specified file pointer. This is done using fwrite.
*
* @param fp The file pointer to output the results to
* @param spaths The array of shortest paths
* @param numV The number of nodes
*/
void output(FILE *fp, int *spaths, int numV) {
fwrite(&numV, sizeof(int), 1, fp);
fwrite(spaths, sizeof(int), numV * numV, fp);
}
/**
* Returns the difference between the start and end timevals
*
* @param start The starting timeval structure
* @param end The ending timeval structure
*/
void output_time(struct timeval start, struct timeval end) {
float diff = ((end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec) / 1.e6;
printf("Total computation time: %fs\n", diff);
}