logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

r10691 - trunk/libraries/packetizer: msg#00084

Subject: r10691 - trunk/libraries/packetizer
Author: hannes
Date: Sat Apr 15 16:44:42 2006
New Revision: 10691

Modified:
   trunk/libraries/packetizer/protocol-definer-macro.dylan
Log:
Bug: 7299
*use parse-frame instead of maybe-parse-frame (parse-frame for 
<container-frame> is lazy)

Modified: trunk/libraries/packetizer/protocol-definer-macro.dylan
==============================================================================
--- trunk/libraries/packetizer/protocol-definer-macro.dylan     (original)
+++ trunk/libraries/packetizer/protocol-definer-macro.dylan     Sat Apr 15 
16:44:42 2006
@@ -274,7 +274,7 @@
   frame :: <unparsed-container-frame>,
   start :: <integer>,
   packet :: <byte-sequence>)
- maybe-parse-frame(field.type, packet, start, frame);
+ parse-frame(field.type, packet, start: start, parent: frame);
 end;
 define method parse-frame-field-aux
   (field :: <variably-typed-field>,
@@ -282,9 +282,10 @@
    start :: <integer>,
    packet :: <byte-sequence>)
   let type = field.type-function(frame);
-  maybe-parse-frame(type, packet, start, frame);
+  parse-frame(type, packet, start: start, parent: frame);
 end;
 
+//XXX: refactor here. parse more lazy; use <frame-field> infrastructure
 define method parse-frame-field-aux
   (field :: <self-delimited-repeated-field>,
    frame :: <unparsed-container-frame>,
@@ -295,10 +296,10 @@
   let start = start;
   if (packet.size > 0)
     let (value, offset)
-      = maybe-parse-frame(field.type,
-                          subsequence(packet, start: byte-offset(start)),
-                          bit-offset(start),
-                          frame);
+      = parse-frame(field.type,
+                    subsequence(packet, start: byte-offset(start)),
+                    start: bit-offset(start),
+                    parent: frame);
     unless (offset)
       offset := end-offset(get-frame-field(field-count(value.object-class) - 
1, value));
     end;
@@ -311,10 +312,10 @@
     start := byte-offset(start) * 8 + offset;
     while ((~ field.reached-end?(frames.last)) & (byte-offset(start) < 
packet.size))
       let (value, offset)
-        = maybe-parse-frame(field.type,
+        = parse-frame(field.type,
                             subsequence(packet, start: byte-offset(start)),
-                            bit-offset(start),
-                            frame);
+                            start: bit-offset(start),
+                            parent: frame);
       unless (offset)
         offset := end-offset(get-frame-field(field-count(value.object-class) - 
1, value));
       end;
@@ -340,11 +341,11 @@
   if (packet.size > 0)
     for (i from 0 below field.count(frame))
       let (value, offset)
-        = maybe-parse-frame(field.type,
-                            subsequence(packet,
-                                        start: byte-offset(start)),
-                            bit-offset(start),
-                            frame);
+        = parse-frame(field.type,
+                      subsequence(packet,
+                                  start: byte-offset(start)),
+                      start: bit-offset(start),
+                      parent: frame);
       unless (offset)
         offset := end-offset(get-frame-field(field-count(value.object-class) - 
1, value));
       end;
@@ -360,13 +361,6 @@
   values(frames, start);
 end;
 
-define inline method maybe-parse-frame (frame-type :: subclass(<frame>),
-                                        packet :: <byte-vector>,
-                                        start :: <integer>,
-                                        parent :: false-or(<container-frame>))
-  maybe-parse-frame(frame-type, subsequence(packet), start, parent);
-end;
-
 define method parse-frame (frame-type :: subclass(<container-frame>),
                            packet :: <byte-sequence>,
                            #key start :: <integer> = 0,
@@ -382,13 +376,6 @@
     values(frame, length)
   end;
 end;
-define inline method maybe-parse-frame (frame-type :: subclass(<frame>),
-                                        packet :: <byte-sequence>,
-                                        start :: <integer>,
-                                        parent :: false-or(<container-frame>))
-  parse-frame(frame-type, packet, start: start, parent: parent);
-end;
-
 
 define macro frame-field-generator
     { frame-field-generator(?type:name; ?count:expression; field 
?field-name:name ?foo:*  ; ?rest:*) }
-- 
Gd-chatter mailing list
Gd-chatter@xxxxxxxxxxxxxxxx
https://www.gwydiondylan.org/mailman/listinfo/gd-chatter



<Prev in Thread] Current Thread [Next in Thread>