-
Notifications
You must be signed in to change notification settings - Fork 2
/
FM.cpp
107 lines (83 loc) · 1.82 KB
/
FM.cpp
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*============================================
# Filename: FM.cpp
# Ver 1.0 2014-06-08
# Copyright (C) 2014 ChenLonggang ([email protected])
#
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 or later of the License.
#
# Description:
=============================================*/
#include"FM.h"
FM::FM(const char *filename,int speedlevel):wt(filename,256,32,1,speedlevel){}
FM::FM():wt(){}
int FM::getN(){
return wt.GetN()-1;
}
int FM::getAlphabetSize(){
return wt.GetAlphabetsize();
}
int FM::sizeInByte()
{
return wt.SizeInByte();
}
int FM::sizeInByteForCount()
{
return wt.SizeInByte_count();
}
int FM::sizeInByteForLocate()
{
return wt.SizeInByte_locate();
}
int FM::sizeInByteForExtract()
{
return wt.SizeInByte_extract();
}
double FM::compressRatioForCount(){
return sizeInByteForCount()/(getN()*1.0);
}
double FM::compressRatioForLocate(){
return sizeInByteForLocate()/(getN()*1.0);
}
double FM::compressRatioForExtract(){
return sizeInByteForExtract()/(getN()*1.0);
}
double FM::compressRatio(){
return sizeInByte()/(getN()*1.0);
}
int FM::save(const char * indexfile)
{
savekit s(indexfile);
s.writeu64(198809102510);
wt.Save(s);
s.close();
return 0;
}
int FM::load(const char * indexfile)
{
loadkit s(indexfile);
unsigned long long int magicnum=0;
s.loadu64(magicnum);
if(magicnum!=198809102510)
{
cerr<<"Not a FM_Index file"<<endl;
exit(0);
}
wt.Load(s);
s.close();
cout<<"Load is ok"<<endl;
return 0;
}
void FM::counting(const char * pattern,int &num)
{
wt.Counting(pattern,num);
}
int * FM::locating(const char * pattern,int & num)
{
return wt.Locating(pattern,num);
}
unsigned char * FM::extracting(int pos,int len)
{
return wt.Extracting(pos,len);
}