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
非常に多くの回数が呼び出される可能性があり、そのたびにすべてのスイッチを通過する必要があります)。