[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