[Gd-chatter] r10874 - in trunk/libraries: id3v2 packetizer

hannes at gwydiondylan.org hannes at gwydiondylan.org
Fri Sep 1 00:12:43 CEST 2006


Author: hannes
Date: Fri Sep  1 00:12:41 2006
New Revision: 10874

Modified:
   trunk/libraries/id3v2/id3v2.dylan
   trunk/libraries/packetizer/module.dylan
   trunk/libraries/packetizer/packetizer.dylan
   trunk/libraries/packetizer/protocol-definer-macro.dylan
Log:
Bug: 7299
*remove <container-frame-cache> classes
*<decoded-container-frame> now has false-or on all its slot definitions, and replaces <container-frame-cache>
*move parent and concrete-frame-fields to <decoded-container-frame>, <unparsed-container-frame> delegates to its slot

This change was obvious after thinking about our usage, we're parsing as lazy, so will never have
container-frames where each slot is a real frame by calling make on the container-frame.

Modified: trunk/libraries/id3v2/id3v2.dylan
==============================================================================
--- trunk/libraries/id3v2/id3v2.dylan	(original)
+++ trunk/libraries/id3v2/id3v2.dylan	Fri Sep  1 00:12:41 2006
@@ -36,9 +36,6 @@
 define class <id3v2-string> (<container-frame>)
 end;
 
-define class <id3v2-string-cache> (<id3v2-string>, <container-frame-cache>)
-end;
-
 define class <unparsed-id3v2-string> (<id3v2-string>, <unparsed-container-frame>)
 end;
 

Modified: trunk/libraries/packetizer/module.dylan
==============================================================================
--- trunk/libraries/packetizer/module.dylan	(original)
+++ trunk/libraries/packetizer/module.dylan	Fri Sep  1 00:12:41 2006
@@ -94,20 +94,17 @@
     find-protocol-field;
 
   export <container-frame>,
-    <container-frame-cache>,
     <unparsed-container-frame>,
     <decoded-container-frame>,
     frame-name,
     unparsed-class,
     decoded-class,
-    cache-class,
     field-count,
     fixup!,
     parent,
     packet;
 
   export <header-frame>,
-    <header-frame-cache>,
     <unparsed-header-frame>,
     <decoded-header-frame>,
     payload;
@@ -118,7 +115,7 @@
 
   export protocol-definer;
   //XXX: we shouldn't need to export those
-  export real-class-definer, cache-class-definer, decoded-class-definer, gen-classes,
+  export real-class-definer, decoded-class-definer, gen-classes,
     frame-field-generator, summary-generator, unparsed-frame-field-generator; 
 end module packetizer;
 

Modified: trunk/libraries/packetizer/packetizer.dylan
==============================================================================
--- trunk/libraries/packetizer/packetizer.dylan	(original)
+++ trunk/libraries/packetizer/packetizer.dylan	Fri Sep  1 00:12:41 2006
@@ -257,14 +257,6 @@
 
 define open abstract class <container-frame> (<variable-size-untranslated-frame>)
   virtual constant slot frame-name :: <string>;
-  slot parent :: false-or(<container-frame>) = #f, init-keyword: parent:;
-  slot concrete-frame-fields :: <vector>;
-end;
-
-define method initialize (frame :: <container-frame>,
-                          #rest rest, #key, #all-keys)
-  next-method();
-  frame.concrete-frame-fields := make(<vector>, size: field-count(frame.object-class), fill: #f);
 end;
 
 define open generic frame-name (frame :: <container-frame>) => (res :: <string>);
@@ -303,12 +295,16 @@
 define open generic decoded-class (type :: subclass(<container-frame>))
   => (class :: <class>);
 
-define open generic cache-class (type :: subclass(<container-frame>))
-  => (class :: <class>);
-
-define open abstract class <container-frame-cache> (<container-frame>) end;
+define open abstract class <decoded-container-frame> (<container-frame>)
+  slot concrete-frame-fields :: <vector>;
+  slot parent :: false-or(<container-frame>) = #f, init-keyword: parent:;
+end;
 
-define open abstract class <decoded-container-frame> (<container-frame>) end;
+define method initialize (frame :: <decoded-container-frame>,
+                          #rest rest, #key, #all-keys)
+  next-method();
+  frame.concrete-frame-fields := make(<vector>, size: field-count(frame.object-class), fill: #f);
+end;
 
 define open abstract class <unparsed-container-frame> (<container-frame>)
   slot packet :: type-union(<byte-vector>, <byte-vector-subsequence>),
@@ -316,6 +312,22 @@
   slot cache :: <container-frame>;
 end;
 
+define method initialize (class :: <unparsed-container-frame>,
+                          #rest rest, #key parent, #all-keys)
+  next-method();
+  parent-setter(parent, class.cache);
+end;
+define inline method concrete-frame-fields (frame :: <unparsed-container-frame>) => (res :: <vector>)
+  frame.cache.concrete-frame-fields;
+end;
+
+define inline method parent (frame :: <unparsed-container-frame>) => (res :: false-or(<container-frame>))
+  frame.cache.parent;
+end;
+
+define inline method parent-setter (value :: false-or(<container-frame>), frame :: <unparsed-container-frame>) => (res :: false-or(<container-frame>))
+  frame.cache.parent := value;
+end;
 
 define method get-frame-field (field-index :: <integer>, frame :: <container-frame>)
  => (res :: <frame-field>)
@@ -345,10 +357,6 @@
 define open abstract class <header-frame> (<container-frame>)
 end;
 
-define open abstract class <header-frame-cache>
-  (<header-frame>, <container-frame-cache>)
-end;
-
 define open abstract class <decoded-header-frame>
   (<header-frame>, <decoded-container-frame>)
 end;

Modified: trunk/libraries/packetizer/protocol-definer-macro.dylan
==============================================================================
--- trunk/libraries/packetizer/protocol-definer-macro.dylan	(original)
+++ trunk/libraries/packetizer/protocol-definer-macro.dylan	Fri Sep  1 00:12:41 2006
@@ -35,7 +35,7 @@
         static-end(last("$" ## ?name ## "-fields"));
       end;
       define method make (class == ?name, #rest rest, #key, #all-keys) => (res :: ?name)
-        let frame = apply(make, cache-class(?name), rest);
+        let frame = apply(make, decoded-class(?name), rest);
         for (field in fields(frame))
           if (field.getter(frame) = #f)
             field.setter(field.init-value, frame);
@@ -129,24 +129,6 @@
 end;
 
 
-define macro cache-class-definer
-    { cache-class-definer(?:name; ?superclasses:*; ?fields:*) } 
-    => { define class ?name (?superclasses) ?fields end }
-    
-    fields:
-    { } => { }
-    { ?field:*; ... } => { ?field ; ... }
-    
-    field:
-    { field ?:name \:: ?field-type:name ?rest:* }
-      => { slot ?name :: false-or(high-level-type(?field-type)) = #f, init-keyword: ?#"name" }
-    { variably-typed-field ?:name, ?rest:* }
-      => { slot ?name :: false-or(<frame>) = #f, init-keyword: ?#"name" }
-    { repeated field ?:name ?rest:* }
-      => { slot ?name :: false-or(<stretchy-vector>) = #f, init-keyword: ?#"name" }
-    
-end;
-
 define macro decoded-class-definer
     { decoded-class-definer(?:name; ?superclasses:*; ?fields:*) }
       => { define class ?name (?superclasses) ?fields end }
@@ -157,24 +139,19 @@
     
     field:
     { field ?:name \:: ?field-type:name ?rest:* }
-    => { slot ?name :: high-level-type(?field-type),
-      required-init-keyword: ?#"name" }
+    => { slot ?name :: false-or(high-level-type(?field-type)) = #f,
+      init-keyword: ?#"name" }
     { variably-typed-field ?:name, ?rest:* }
-    => { slot ?name :: <frame>,
-      required-init-keyword: ?#"name" }
+    => { slot ?name :: false-or(<frame>) = #f,
+      init-keyword: ?#"name" }
     { repeated field ?:name ?rest:* }
-      => { slot ?name :: <stretchy-vector>,
-      required-init-keyword: ?#"name" }
+      => { slot ?name :: false-or(<stretchy-vector>) = #f,
+      init-keyword: ?#"name" }
 end;
 
 define macro gen-classes
   { gen-classes(?:name; ?superframe:name) }
- => { define inline method cache-class
-       (type :: subclass("<" ## ?name ## ">")) => (class == "<" ## ?name ## "-cache>");
-        "<" ## ?name ## "-cache>"
-      end;
-
-      define inline method unparsed-class
+ => { define inline method unparsed-class
        (type :: subclass("<" ## ?name ## ">")) => (class == "<unparsed-" ## ?name ## ">");
         "<unparsed-" ## ?name ## ">"
       end;
@@ -185,7 +162,7 @@
       end;
 
       define class "<unparsed-" ## ?name ## ">" ("<" ## ?name ## ">", "<unparsed-" ## ?superframe ## ">")
-        inherited slot cache :: "<" ## ?name ## ">" = make("<" ## ?name ## "-cache>");
+        inherited slot cache :: "<" ## ?name ## ">" = make("<decoded-" ## ?name ## ">");
       end; }
 end;
 
@@ -420,9 +397,6 @@
         ?fields:*
       end } =>
       { real-class-definer("<" ## ?name ## ">"; "<" ## ?superprotocol ## ">"; ?fields);
-        cache-class-definer("<" ## ?name ## "-cache>";
-                            "<" ## ?name ## ">", "<" ## ?superprotocol ## "-cache>";
-                            ?fields);
         decoded-class-definer("<decoded-" ## ?name ## ">";
                               "<" ## ?name ## ">", "<decoded-" ## ?superprotocol ## ">";
                               ?fields);



More information about the chatter mailing list