@@ -39,39 +39,8 @@ WiresharkIdLayer::WiresharkIdLayer(WiresharkGenerator& generator, ParseLayer par
3939{
4040}
4141
42- std::string WiresharkIdLayer::wiresharkDissectBodyImpl () const
43- {
44- static const std::string Templ =
45- " #^#FIELD#$#\n "
46- " local id = #^#VALUE_FUNC#$#()\n "
47- " local msg = #^#MAP#$#[id]\n "
48- " #^#OFFSET#$# = #^#NEXT_OFFSET#$#\n "
49- " #^#NEXT#$#\n "
50- ;
51-
52- auto * field = wiresharkField ();
53- assert (field != nullptr );
54-
55- util::GenReplacementMap repl = {
56- {" FIELD" , wiresharkDissectFieldCode ()},
57- {" NEXT" , wiresharkNextFuncCode ()},
58- {" MAP" , wiresharkMsgMapNameInternal ()},
59- {" VALUE_FUNC" , field->wiresharkValueFuncName ()},
60- {" OFFSET" , WiresharkField::wiresharkOffsetStr ()},
61- {" NEXT_OFFSET" , WiresharkField::wiresharkNextOffsetStr ()},
62- };
63-
64- return util::genProcessTemplate (Templ, repl);
65- }
66-
67- std::string WiresharkIdLayer::wiresharkExtraDissectCodeImpl () const
42+ std::string WiresharkIdLayer::wiresharkMessagesMapCode (const GenMessagesAccessList& messages, const std::string& mapName)
6843{
69- auto * parentFrame = genParentFrame ();
70- assert (parentFrame != nullptr );
71- auto parentNs = parentFrame->genParentNamespace ();
72- assert (parentNs != nullptr );
73- auto messages = parentNs->genGetAllMessagesIdSorted ();
74-
7544 using DissectMap = std::map<std::uintmax_t /* id */ , util::GenStringsList /* dissect_funcs*/ >;
7645
7746 DissectMap map;
@@ -106,13 +75,49 @@ std::string WiresharkIdLayer::wiresharkExtraDissectCodeImpl() const
10675 ;
10776
10877 util::GenReplacementMap repl = {
109- {" NAME" , wiresharkMsgMapNameInternal () },
78+ {" NAME" , mapName },
11079 {" ELEMS" , util::genStrListToString (elems, " ,\n " , " " )},
11180 };
11281
11382 return util::genProcessTemplate (Templ, repl);
11483}
11584
85+ std::string WiresharkIdLayer::wiresharkDissectBodyImpl () const
86+ {
87+ static const std::string Templ =
88+ " #^#FIELD#$#\n "
89+ " local id = #^#VALUE_FUNC#$#()\n "
90+ " local msg = #^#MAP#$#[id]\n "
91+ " #^#OFFSET#$# = #^#NEXT_OFFSET#$#\n "
92+ " #^#NEXT#$#\n "
93+ ;
94+
95+ auto * field = wiresharkField ();
96+ assert (field != nullptr );
97+
98+ util::GenReplacementMap repl = {
99+ {" FIELD" , wiresharkDissectFieldCode ()},
100+ {" NEXT" , wiresharkNextFuncCode ()},
101+ {" MAP" , wiresharkMsgMapNameInternal ()},
102+ {" VALUE_FUNC" , field->wiresharkValueFuncName ()},
103+ {" OFFSET" , WiresharkField::wiresharkOffsetStr ()},
104+ {" NEXT_OFFSET" , WiresharkField::wiresharkNextOffsetStr ()},
105+ };
106+
107+ return util::genProcessTemplate (Templ, repl);
108+ }
109+
110+ std::string WiresharkIdLayer::wiresharkExtraDissectCodeImpl () const
111+ {
112+ auto * parentFrame = genParentFrame ();
113+ assert (parentFrame != nullptr );
114+ auto parentNs = parentFrame->genParentNamespace ();
115+ assert (parentNs != nullptr );
116+ auto messages = parentNs->genGetAllMessagesIdSorted ();
117+
118+ return wiresharkMessagesMapCode (messages, wiresharkMsgMapNameInternal ());
119+ }
120+
116121std::string WiresharkIdLayer::wiresharkMsgMapNameInternal () const
117122{
118123 return WiresharkGenerator::wiresharkCast (genGenerator ()).wiresharkFuncNameFor (*this , " _msg" );
0 commit comments