我需要用 C++ 实现一些抽象协议客户端-服务器会话解析库。我没有包含整个客户端-服务器对话的文件,但必须即时解析它。我必须实现以下接口:
class parsing_class
{
public:
void on_data( const char* data, size_t len );
//other functions
private:
size_t pos_;// current position in the data flow
bool first_part_parsed_;
bool second_part_parsed_;
//... some more bool markers or something like vector< bool >
};
数据通过on_data
函数传递给我的班级。数据块长度因一次调用而异。我知道协议的数据包格式并且知道应该如何组织对话,所以我可以通过当前pos_
判断我是否有足够的数据来解析Nth
部分。现在实现如下:
void parsing_class::on_data( const char* data, size_t len )
{
pos_ += len;
if( pos > FIRST_PART_SIZE and !first_part_parsed_ )
parse_first_part( data, len );
if( pos > SECOND_PART_SIZE and !second_part_parsed_ )
parse_second_part( data, len );
//and so on..
}
我想要的是一些如何优化这个算法的技巧。也许要避免这些众多if
(on_data
可能会被调用很多次,每次都必须经过所有开关)。