OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
read.cpp
Go to the documentation of this file.
1 #include "wfg.h"
2 #include "avl.h"
3 
4 static void trimLine(char line[])
5 {
6  int i = 0;
7 
8  while(line[i] != '\0')
9  {
10  if (line[i] == '\r' || line[i] == '\n')
11  {
12  line[i] = '\0';
13  break;
14  }
15  i++;
16  }
17 }
18 
20 {
21  int i;
22  for ( i = 0; i < f->nFronts; i++)
23  {
24  printf("Front %d:\n", i+1);
25  int j;
26  for ( j = 0; j < f->fronts[i].nPoints; j++)
27  {
28  printf("\t");
29  int k;
30  for (k = 0; k < f->fronts[i].n; k++)
31  {
32  printf("%f ", f->fronts[i].points[j].objectives[k]);
33  }
34  printf("\n");
35  }
36  printf("\n");
37  }
38 }
39 
40 FILECONTENTS *readFile(const char filename[])
41 {
42  FILE *fp;
43  char line[BUFSIZ];
44  int front = 0, point = 0, objective = 0;
45 
46  FILECONTENTS *fc = (FILECONTENTS *) malloc(sizeof(FILECONTENTS));
47  fc->nFronts = 0;
48  fc->fronts = NULL;
49 
50  fp = fopen(filename, "r");
51  if (fp == NULL)
52  {
53  fprintf(stderr, "File %s could not be opened\n", filename);
54  exit(EXIT_FAILURE);
55  }
56 
57  while(fgets(line, sizeof line, fp) != NULL)
58  {
59  trimLine(line);
60  if (strcmp(line, "#") == 0)
61  {
62  front = fc->nFronts;
63  fc->nFronts++;
64  fc->fronts = (FRONT*)realloc(fc->fronts, sizeof(FRONT) * fc->nFronts);
65  fc->fronts[front].nPoints = 0;
66  fc->fronts[front].points = NULL;
67  }
68  else
69  {
70  FRONT *f = &fc->fronts[front];
71  point = f->nPoints;
72  f->nPoints++;
73  f->points = (POINT*)realloc(f->points, sizeof(POINT) * f->nPoints);
74  f->n = 0;
75  f->points[point].objectives = NULL;
76  f->points[point].tnode = (avl_node_t*) malloc(sizeof(avl_node_t));
77  char *tok = strtok(line, " \t\n");
78  do
79  {
80  POINT *p = &f->points[point];
81  objective = f->n;
82  f->n++;
83  p->objectives = (OBJECTIVE*) realloc(p->objectives, sizeof(OBJECTIVE) * f->n);
84  p->objectives[objective] = atof(tok);
85  } while ((tok = strtok(NULL, " \t\n")) != NULL);
86  }
87  }
88 
89  fc->nFronts--;
90  // for (int i = 0; i < fc->nFronts; i++) fc->fronts[i].n = fc->fronts[i].points[0].nObjectives;
91  fclose(fp);
92  /* printf("Read %d fronts\n", fc->nFronts);
93  printContents(fc); */
94  return fc;
95 }
Definition: wfg.h:16
int nPoints
Definition: wfg.h:18
Definition: avl.h:52
int nFronts
Definition: wfg.h:25
struct avl_node_t * tnode
Definition: wfg.h:13
POINT * points
Definition: wfg.h:20
int n
Definition: wfg.h:19
OBJECTIVE * objectives
Definition: wfg.h:12
FILECONTENTS * readFile(const char filename[])
Definition: read.cpp:40
FRONT * fronts
Definition: wfg.h:26
Definition: wfg.h:10
void printContents(FILECONTENTS *f)
Definition: read.cpp:19
double OBJECTIVE
Definition: wfg.h:8