ネットワークプログラミング相談室 Port24
レス数が900を超えています。1000を超えると表示できなくなるよ。
0947938
2009/10/10(土) 05:31:28>yaccとか難しすぎて俺には無理です。
yaccについては、>>938で書いたのは単なる思いつきだから、スルーでオケー。
ただ、preccsは面白いと思う。一読を薦めるヨ。自分も実際には触った事ないけどネ。
>こんな感じ?
だいたい、そんな感じ(w
ただ、C++のテンプレートは使用せず、一般的なTLVReaderクラスを定義していた。
イテレータという言葉は(>>938のカキコ内では)デザインパターン用語のつもりで書いた。
疑似コードで書くと、こんな感じ。(実際にはC言語で(GTKみたいな)疑似クラスで実装していた)
unsigned char *recv_buf;
TLVReader reader;
reader = TLVReader.new(recv_buf);
while (tlv = reader.get()) {
switch (tlv.type) {
case TYPE_XXX_PDU:
: // Type別の処理
}
}
階層的なTLV構造の場合には、Type別処理の中で、更に別のTLVReaderインスタンスを生成する。
xxx_reader = TLVReader.new(tlv.value)
while (xxx_tlv = xxx_reader.get()) {
switch (xxx_tlv.type) {
: // Sub Typeの処理
}
}
レス数が900を超えています。1000を超えると表示できなくなるよ。