
On 02/22/13 08:38, Larry Evans wrote:
On 02/22/13 00:16, Antony Polukhin wrote: [snip] In the example code from your last post, which is quoted below, the variant visitor is not used to decode this input stream, it's only used to perform some operaton on the variant. Quoting from Chris' OP:
I will be decoding many of these "packets" and doing various things with them like printing their values to console, etc.
That quote mentions two purposes:
1) Decoding packets 2) Operating on the decoded packets
The code quoted below does 2); however, the 1) is done by the Decode
This should read: The variant visitor code quoted below does 2)
methods shown below, the most complicated of which is the EmployeePacket::Decode. This EmployeePacket::Decode is somewhat like a very simple Spirit alternative parser:
http://www.boost.org/doc/libs/1_53_0/libs/spirit/doc/html/spirit/qi/referenc...
Actually, I think a Spirit would be an instance of the "inversion of control": http://martinfowler.com/bliki/InversionOfControl.html of EmployeePacket::Decode. IOW, the Decode method of processing the binary input stream uses "Normal Control" whereas using spirit to process the input stream would use "Inversion of the Normal Control" to process the binary input stream. That's because, like the #ruby example in the InversionOfControl.html, the Decode method uses "Normal Control" because it decides when to read the input stream (corresponding to the #ruby example's "when to ask questions, when to read responses"), and using a switch statement, when to call another Decode function to process the read data (corresponding to the #ruby example's "when to process those results".). OTOH, spirit, AFAICT, uses "Inverson of the Normal Control" in that it, instead of the user, decides when to read the input and when to call the processing functions (a.k.a the semantic actions, or the "process_name" and "process_quest" functions in the Tk exmaple in InversionOfControl.html). Hence, if you decide to use spirit, I think the Decode functions would have to be rewritten to be semantic actions to be called by the spirit's parsers :( [snip] HTH. -Larry