[matroska] r764 - trunk/RbMatroska

[email protected]
Newsgroups gmane.comp.multimedia.matroska.cvs
Message-ID <[email protected]>
Author: mosu
Date: 2004-09-08 22:03:42 +0400 (Wed, 08 Sep 2004)
New Revision: 764

Modified:
   trunk/RbMatroska/ebml.rb
Log:
Renamed all occurences of "position" to "pos" to match Ruby's usual style. Added some more convenience functions.

Modified: trunk/RbMatroska/ebml.rb
===================================================================
--- trunk/RbMatroska/ebml.rb	2004-09-08 17:08:03 UTC (rev 763)
+++ trunk/RbMatroska/ebml.rb	2004-09-08 18:03:42 UTC (rev 764)
@@ -54,7 +54,7 @@
     end
 
     def ==(id)
-      return false if (id == nil)
+      return false if ((id == nil) or (id.class != Id))
       return ((value == id.value) and (size == id.size))
     end
 
@@ -71,14 +71,14 @@
 
   class Element
     attr_reader :id
-    attr_reader :position
+    attr_reader :pos
     attr_reader :data_size
     attr_reader :element_size
     attr_reader :size_length
 
-    def initialize(id, position, data_size, size_length)
+    def initialize(id, pos, data_size, size_length)
       @id = id
-      @position = position
+      @pos = pos
       @data_size = data_size
       @size_length = size_length
       @element_size = @id.size + @size_length + @data_size
@@ -88,16 +88,22 @@
       return Id.none
     end
 
+    def head_size
+      return @id.size + @size_length
+    end
+
     def skip(ef)
-      ef.io.seek(@position + @element_size, IO::SEEK_SET)
+      ef.io.seek(@pos + @element_size, IO::SEEK_SET)
     end
 
     def read(ef)
       skip(ef)
+
+      return self
     end
 
     def to_s
-      return sprintf("[%s @ 0x%08x size 0x%08x]", id.to_s, @position,
+      return sprintf("[%s @ 0x%08x size 0x%08x]", id.to_s, @pos,
                       @element_size)
     end
   end
@@ -115,6 +121,8 @@
         byte = ef.io.readchar
         @value = (@value << 8) | byte
       end
+
+      return self
     end
 
     def to_i
@@ -134,6 +142,8 @@
         byte = ef.io.readchar
         @value = (@value << 8) | byte
       end
+
+      return self
     end
 
     def to_i
@@ -150,6 +160,8 @@
     def read(ef)
       @value = ef.io.read(@data_size)
       raise DataError if (@value.size < @data_size)
+
+      return self
     end
 
     def to_s
@@ -162,6 +174,8 @@
     def read(ef)
       @value = ef.io.read(@data_size)
       raise DataError if (@value.size < @data_size)
+
+      return self
     end
 
     def to_s
@@ -174,6 +188,8 @@
     def read(ef)
       @value = ef.io.read(@data_size)
       raise EOFError if (@value.size < @data_size)
+
+      return self
     end
 
     def to_s
@@ -187,6 +203,8 @@
       ins = ef.io.read(@data_size)
       raise EOFError if (ins.size < @data_size)
       @value = ins.unpack(@data_size == 4 ? "g" : "G")[0]
+
+      return self
     end
 
     def to_f
@@ -209,8 +227,8 @@
   class Master < Element
     attr_reader :children
 
-    def initialize(id, position, data_size, size_length)
-      super(id, position, data_size, size_length)
+    def initialize(id, pos, data_size, size_length)
+      super(id, pos, data_size, size_length)
       @children = Array.new
     end
 
@@ -229,8 +247,27 @@
           break
         end
       end
+
+      return self
     end
 
+    def each(filter = Id.none)
+      @children.each do |c|
+        yield(c) if ((filter == Id.none) or (filter == c.id))
+      end
+    end
+
+    def find(filter)
+      id = nil
+      if (filter.class == Class)
+        id = filter.global_id
+      else
+        id = filter
+      end
+      @children.each { |c| return c if (c.id == id) }
+      return nil
+    end
+
     def to_s
       s = "{" + self.class.name + " " + super + " "
       @children.each { |c| s += c.to_s + " " }
@@ -311,12 +348,12 @@
     end
 
     def read_element_head
-      position = @io.pos
+      pos = @io.pos
       id = read_id
       return nil if (id.class == NilClass)
       size = read_size
       return nil if (size.class == NilClass)
-      return find_class_for_id(id).new(id, position, size[0], size[1])
+      return find_class_for_id(id).new(id, pos, size[0], size[1])
     end
 
     def map_ids(namespace = nil)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.