00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef __DFA_PROFILE_HH__
00038 #define __DFA_PROFILE_HH__
00039
00040 #include <vector>
00041
00042 #include "debug.h"
00043 #include "scanner_dfa_spec.hh"
00044 #include "basic_dfa_spec.hh"
00045
00046 class DfaStateProfile
00047 {
00048 public:
00049
00050 DfaStateProfile (BasicDfaSpec::State &s);
00051
00052 bool read (istream &is);
00053
00054 void reset ();
00055
00056 unsigned long int operator [] (int i)
00057 {
00058 ASSERT((0 <= i) && (i <= size()),
00059 "Bad index in DfaStateProfile::operator []")
00060 return freqs[i];
00061 }
00062
00063 int size()
00064 {
00065 return freqs.size();
00066 }
00067
00068 private:
00069
00070 vector<unsigned long int> freqs;
00071 };
00072
00073 class BasicDfaProfile
00074 {
00075 public:
00076
00077 BasicDfaProfile (BasicDfaSpec &dfa);
00078
00079 bool read (istream &is);
00080
00081 void reset ();
00082
00083 DfaStateProfile& operator [] (int i)
00084 {
00085 ASSERT((0 <= i) && (i <= size()),
00086 "Bad index in BasicDfaProfile::operator []")
00087 return stateProfiles[i];
00088 }
00089
00090 int size () const
00091 {
00092 return stateProfiles.size();
00093 }
00094
00095 private:
00096
00097 vector<DfaStateProfile> stateProfiles;
00098 };
00099
00100 class ScannerDfaProfile
00101 {
00102 public:
00103
00104 ScannerDfaProfile (ScannerDfaSpec &dfa);
00105
00106 bool read (istream &is);
00107
00108 void reset ();
00109
00110 BasicDfaProfile& operator [] (int i)
00111 {
00112 ASSERT((0 <= i) && (i <= size()),
00113 "Bad index in ScannerDfaProfile::operator []")
00114 return dfaProfiles[i];
00115 }
00116
00117 int size() const
00118 {
00119 return dfaProfiles.size();
00120 }
00121
00122 vector<BasicDfaProfile> dfaProfiles;
00123 };
00124
00125
00126 #endif