4 #include "buildFacade.h"
6 /* only for getTime() */
8 #include <sys/resource.h>
10 /* macro to detect and notify errors */
11 #define IFERROR(error) {{if (error) { fprintf(stderr, "%s\n", error_index(error)); exit(1); }}}
13 int loadSEfile (char *basename, uint **v, uint *n);
14 void print_usage(char *);
17 int main(int argc, char *argv[]) {
21 void *index; uint index_len;
27 if (argc < 2) print_usage(argv[0]);
32 nchars += strlen(argv[i]);
33 params = (char *) malloc((nchars+1)*sizeof(char));
34 params[nchars] = '\0';
37 len = strlen(argv[i]);
38 strncpy(params+nchars,argv[i],len);
39 params[nchars+len] = ' ';
42 params[nchars-1] = '\0';
45 basenamefile = argv[1];
49 error = loadSEfile (basenamefile, &se, &seSize);
52 //fprintf(stderr,"\n parameters (stopwordsFilename): \"%s\"\n",params); fflush(stderr);
54 error = buildIntIndex(se,seSize, params,(void **)&index);
58 error = saveIntIndex(index, basenamefile);
64 error = sizeIntIndex(index, &index_len);
67 printf("\n\n\t Freeing memory...");
69 error = freeIntIndex(index);
75 fprintf(stdout,"\n\tBuilding time (**building self-index on ints: %.3f secs", end-start );
76 fprintf(stdout,"\n\t ## Input: %u bytes --> Output (pres_layer) %u bytes.", seSize*sizeof(uint), index_len);
77 fprintf(stdout,"\n\t ## Overall compression --> %.3f%% (%.3f bits per char).\n\n",
78 (100.0*index_len)/(seSize*sizeof(uint)), (index_len*8.0)/(seSize*sizeof(uint)));
84 int loadSEfile (char *basename, uint **v, uint *n){
87 sprintf(filename,"%s.%s",basename,SE_FILE_EXT);
89 uint sizeFile = fileSize(filename);
92 printf("Cannot read information from file %s\n", filename); return -1;
95 if( (file = open(filename, O_RDONLY)) < 0) {
96 printf("Cannot open file %s\n", filename);
100 uint *se = (uint *) malloc (sizeFile);
101 uint seSize = sizeFile / sizeof(uint);
102 read(file, se, sizeFile); //the samples
115 double usertime, systime;
118 getrusage (RUSAGE_SELF, &usage);
120 usertime = (double) usage.ru_utime.tv_sec +
121 (double) usage.ru_utime.tv_usec / 1000000.0;
123 systime = (double) usage.ru_stime.tv_sec +
124 (double) usage.ru_stime.tv_usec / 1000000.0;
126 return (usertime + systime);
130 void print_usage(char * progname) {
131 fprintf(stderr, "Usage: %s <index file> [<parameters>]\n", progname);
132 fprintf(stderr, "\nIt builds the index on Integer for the sequence in <index file>.se,\n");
133 fprintf(stderr, "storing it in [<index file>.[*]]; Any additional <parameters> \n");
134 fprintf(stderr, "will be passed to the construction function.\n");
135 fprintf(stderr, "At the end, the program sends to the standard error \n");
136 fprintf(stderr, "performance measures on time to build it.\n\n");