state_table.h

00001 #ifndef __STATE_TABLE_H__
00002 #define __STATE_TABLE_H__
00003 
00004 #include <vector>
00005 #include <string>
00006 
00007 namespace MetaCC
00008 {
00021     class StateTable
00022     {
00025         class edges_list_t
00026         {
00027             int         m_dst_states[256]; 
00028             int         m_masks[256];      
00029             public:
00031             void set_state(int index, int dst_state, uint8 mask) { m_dst_states[index] = dst_state; m_masks[index] = mask; }
00033             int get_state(int index) const { return m_dst_states[index]; }
00035             uint8 get_mask(int index) const { return m_masks[index]; }
00036         };
00037 
00038         std::vector<edges_list_t> m_states;    
00039         public:
00046         int add_state();
00047 
00049         static std::string bin_str(uint8 v) {
00050             std::string s;
00051             for (int i=7;i>=0;i--) s += ((v>>i) & 0x01) + '0';
00052             return s;
00053         }
00054 
00056         static std::string mask_str(uint8 v) {
00057             std::string s;
00058             for (int i=7;i>=0;i--) s += ((v>>i) & 0x01)?'d':'x';
00059             return s;
00060         }
00061 
00085         bool learn(int src_state, const char *patt_str, int dest_state, uint8 value = 0, uint8 mask = 0);
00086 
00091         int states_count() const { return m_states.size(); }
00092 
00096         int get_state_edge(int state_id, uint8 v) const { return m_states[state_id].get_state(v); }
00097     };
00098 
00099 }
00100 
00101 #endif

Generated on Sat Sep 9 03:50:44 2006 for Openem APIs by  doxygen 1.4.7