about summary refs log tree commit diff
path: root/sourcecodes/k-best/src/get_best_sinks.c
blob: 4d83d21703672cd3f44e5adff162fcb563e3139d (plain)
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
68
69
70
71
72
73
74
75
76
77
78
#include "cfg.h"

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

#include "files.h"

void get_best_sinks(int nof_vars, FILE** files, char* sinkfile)
{

  FILE* sinkf        = fopen(sinkfile, "wb");
FILE *fp = fopen("/home/grad/lram/RA stuff/check/src/sinks.txt","w");
  
score_t* scores    = malloc((1U<<nof_vars) * sizeof(score_t));
  score_t best_score = 0.0;

  varset_t varset;
  for(varset=0; varset < (1U<<nof_vars); ++varset){
//    printf("\n\n\nVarset %u",varset);
    int sink;
    char best_sink = -1;

    for(sink=0; sink<nof_vars; ++sink){ /* could use ffs */
  //    printf("\nTry Sink %d",sink);
      varset_t sinkleton = 1U<<sink;

      if (varset & sinkleton) {
//printf("  True!!");
	score_t new_score = scores[varset & ~sinkleton];

//printf("New score = %f + ",new_score);
//printf("Scores[ %d ] +",varset & ~sinkleton);

	score_t par_score;
	fread(&par_score, sizeof(score_t), 1, files[sink]);
//printf(" New score + %f",par_score);
//printf(" Score is [%d .bss,???] ",sink);
	new_score += par_score;
	if (best_sink == -1 || best_score < new_score){
//printf("This is better than previous");
	  best_score = new_score;
	  best_sink  = sink;

	}
      }
    }
    
    scores[varset] = best_score;

    fwrite(&best_sink, sizeof(char), 1, sinkf);

fprintf(fp,"Best score: %f",best_score);
fprintf(fp,"Best sink: %d", best_sink);
  }

  free(scores);
  fclose(sinkf);
}


int main(int argc, char* argv[])
{

  if (argc!=4) {
    fprintf(stderr, "Usage: get_best_net nof_vars dirname sinkfile\n");
    return 1;
  }
  
  {
    int nof_vars = atoi(argv[1]);
    FILE** files = open_files(nof_vars, argv[2],".bss", "rb");
    get_best_sinks(nof_vars, files, argv[3]);
    free_files(nof_vars, files);
  }
  
  return 0;
}