Debug swcsa
[SXSI/TextCollection.git] / incbwt / sample_lcp.cpp
1 #include <algorithm>
2 #include <fstream>
3 #include <iostream>
4
5 #include "rlcsa.h"
6 #include "misc/utils.h"
7
8
9 using namespace CSA;
10
11
12 int
13 main(int argc, char** argv)
14 {
15   std::cout << "LCP sampler" << std::endl;
16   if(argc < 3)
17   {
18     std::cout << "Usage: sample_plcp base_name sample_rate" << std::endl;
19     return 1;
20   }
21
22   std::string base_name = argv[1];
23   std::string lcp_name = base_name + LCP_SAMPLES_EXTENSION;
24   std::cout << "LCP samples: " << lcp_name << std::endl;
25   std::ofstream lcp_file(lcp_name.c_str(), std::ios_base::binary);
26   if(!lcp_file)
27   {
28     std::cerr << "Error creating LCP sample file!" << std::endl;
29     return 2;
30   }
31
32   usint sample_rate = atoi(argv[2]);
33   std::cout << "Sample rate: " << sample_rate << std::endl;
34   std::cout << std::endl;
35   RLCSA* rlcsa = new RLCSA(base_name);
36
37   double start = readTimer();
38   pair_type* sampled_values = 0;
39   usint samples = rlcsa->sampleLCP(sample_rate, sampled_values, true);
40   usint data_size = rlcsa->getSize();
41   delete rlcsa; // Saves memory.
42   LCPSamples lcp(sampled_values, data_size, samples, true, true);
43   lcp.writeTo(lcp_file);
44
45   double time = readTimer() - start;
46   double megabytes = data_size / (double)MEGABYTE;
47   double size = lcp.reportSize() / (double)MEGABYTE;
48   std::cout << megabytes << " megabytes in " << time << " seconds (" << (megabytes / time) << " MB/s)" << std::endl;
49   std::cout << "Sampled LCP size: " << size << " MB" << std::endl;
50   std::cout << std::endl;
51
52   lcp_file.close();
53
54   return 0;
55 }