Author: mosu
Date: 2004-09-12 14:07:43 +0400 (Sun, 12 Sep 2004)
New Revision: 786
Modified:
trunk/RbMatroska/ebml.rb
trunk/RbMatroska/ebml/binary.rb
trunk/RbMatroska/ebml/float.rb
trunk/RbMatroska/ebml/master.rb
trunk/RbMatroska/ebml/sinteger.rb
trunk/RbMatroska/ebml/string.rb
trunk/RbMatroska/ebml/uinteger.rb
trunk/RbMatroska/ebml/unicodestring.rb
trunk/RbMatroska/mkvinfo.rb
Log:
Added "update_size" for all classes.
Modified: trunk/RbMatroska/ebml/binary.rb
===================================================================
--- trunk/RbMatroska/ebml/binary.rb 2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/binary.rb 2004-09-12 10:07:43 UTC (rev 786)
@@ -16,6 +16,8 @@
module Ebml
class Binary < Element
+ attr_accessor :value
+
def read(ef)
@value = ef.io.read(@data_size)
raise EOFError if (@value.size < @data_size)
@@ -27,6 +29,11 @@
@value ||= Array.new
return "[Binary size " + @data_size.to_s + "]"
end
+
+ def update_size
+ @data_size = @value.size
+ return super
+ end
end # class Binary
end # module Ebml
Modified: trunk/RbMatroska/ebml/float.rb
===================================================================
--- trunk/RbMatroska/ebml/float.rb 2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/float.rb 2004-09-12 10:07:43 UTC (rev 786)
@@ -16,10 +16,18 @@
module Ebml
class Float < Element
+ attr_accessor :double_precision
+ attr_accessor :value
+
+ def initialize(id, pos, data_size, size_length)
+ super
+ @double_precision = data_size == 4
+ end
+
def read(ef)
ins = ef.io.read(@data_size)
raise EOFError if (ins.size < @data_size)
- @value = ins.unpack(@data_size == 4 ? "g" : "G")[0]
+ @value = ins.unpack(double_precision ? "g" : "G")[0]
return self
end
@@ -32,6 +40,11 @@
def to_s
return sprintf("%f", to_f)
end
+
+ def update_size
+ @data_size = double_precision ? 4 : 8
+ return super
+ end
end # class Float
end # module Ebml
Modified: trunk/RbMatroska/ebml/master.rb
===================================================================
--- trunk/RbMatroska/ebml/master.rb 2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/master.rb 2004-09-12 10:07:43 UTC (rev 786)
@@ -19,7 +19,7 @@
attr_reader :children
def initialize(id, pos, data_size, size_length)
- super(id, pos, data_size, size_length)
+ super
@children = Array.new
end
@@ -64,6 +64,26 @@
@children.each { |c| s += c.to_s + " " }
return s + "}"
end
+
+ def update_size
+ @data_size = 0
+ @children.each { |c| @data_size += c.update_size + c.head_size }
+ return super
+ end
+
+ def push(c)
+ @children.push(c)
+ return self
+ end
+
+ def clear
+ @children = Array.new
+ return self
+ end
+
+ def master?
+ return true
+ end
end # class Master
end # module Ebml
Modified: trunk/RbMatroska/ebml/sinteger.rb
===================================================================
--- trunk/RbMatroska/ebml/sinteger.rb 2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/sinteger.rb 2004-09-12 10:07:43 UTC (rev 786)
@@ -16,6 +16,8 @@
module Ebml
class SInteger < Element
+ attr_accessor :value
+
def read(ef)
byte = ef.io.readchar
if ((byte & 0x80) == 0x80)
@@ -40,6 +42,30 @@
def to_s
return to_i.to_s
end
+
+ def update_size
+ @value ||= 0
+ if ((@value <= 0x7f) and (@value >= (-0x80)))
+ @data_size = 1
+ elsif ((@value <= 0x7fff) and (@value >= (-0x8000)))
+ @data_size = 2
+ elsif ((@value <= 0x7fffff) and (@value >= (-0x800000)))
+ @data_size = 3
+ elsif ((@value <= 0x7fffffff) and (@value >= (-0x80000000)))
+ @data_size = 4
+ elsif ((@value <= 0x7fffffffff) and (@value >= -0x8000000000))
+ @data_size = 5
+ elsif ((@value <= 0x7fffffffffff) and (@value >= -0x800000000000))
+ @data_size = 6
+ elsif ((@value <= 0x7fffffffffffff) and (@value >= -0x80000000000000))
+ @data_size = 7
+ else
+ @data_size = 8
+ end
+
+ return super
+ end
+
end # class SInteger
end # module Ebml
Modified: trunk/RbMatroska/ebml/string.rb
===================================================================
--- trunk/RbMatroska/ebml/string.rb 2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/string.rb 2004-09-12 10:07:43 UTC (rev 786)
@@ -16,6 +16,8 @@
module Ebml
class String < Element
+ attr_accessor :value
+
def read(ef)
@value = ef.io.read(@data_size)
raise DataError if (@value.size < @data_size)
@@ -27,6 +29,12 @@
@value ||= ""
return @value
end
+
+ def update_size
+ @value ||= ""
+ @data_size = @value.size
+ return super
+ end
end # class String
end # module Ebml
Modified: trunk/RbMatroska/ebml/uinteger.rb
===================================================================
--- trunk/RbMatroska/ebml/uinteger.rb 2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/uinteger.rb 2004-09-12 10:07:43 UTC (rev 786)
@@ -16,6 +16,8 @@
module Ebml
class UInteger < Element
+ attr_accessor :value
+
def read(ef)
@value = 0
1.upto(@data_size) do
@@ -34,6 +36,30 @@
def to_s
return to_i.to_s
end
+
+ def update_size
+ @value ||= 0
+
+ if (@value <= 0xff)
+ @data_size = 1
+ elsif (@value <= 0xffff)
+ @data_size = 2
+ elsif (@value <= 0xffffff)
+ @data_size = 3
+ elsif (@value <= 0xffffffff)
+ @data_size = 4
+ elsif (@value <= 0xffffffffff)
+ @data_size = 5
+ elsif (@value <= 0xffffffffffff)
+ @data_size = 6
+ elsif (@value <= 0xffffffffffffff)
+ @data_size = 7
+ else
+ @data_size = 8
+ end
+
+ return super
+ end
end # class UInteger
end # module Ebml
Modified: trunk/RbMatroska/ebml/unicodestring.rb
===================================================================
--- trunk/RbMatroska/ebml/unicodestring.rb 2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml/unicodestring.rb 2004-09-12 10:07:43 UTC (rev 786)
@@ -16,17 +16,6 @@
module Ebml
class UnicodeString < String
- def read(ef)
- @value = ef.io.read(@data_size)
- raise DataError if (@value.size < @data_size)
-
- return self
- end
-
- def to_s
- @value ||= ""
- return @value
- end
end # class UnicodeString
end # module Ebml
Modified: trunk/RbMatroska/ebml.rb
===================================================================
--- trunk/RbMatroska/ebml.rb 2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/ebml.rb 2004-09-12 10:07:43 UTC (rev 786)
@@ -15,7 +15,7 @@
#
module Ebml
- def coded_size(s)
+ def Ebml.coded_size(s)
if (s <= 0x0000007f)
return 1
elsif (s <= 0x00003fff)
@@ -87,12 +87,13 @@
end
def head_size
- return @id.size + @size_length
+ return @id.size +
+ (@size_length == -1 ? Ebml.coded_size(@data_size) : @size_length)
+
end
def element_size
- return @id.size + @data_size +
- (@size_length == -1 ? Ebml.coded_size(@data_size) : @size_length)
+ return @data_size + head_size
end
def force_size_length(size_length)
@@ -113,6 +114,17 @@
return sprintf("[%s @ 0x%08x size 0x%08x]", id.to_s, @pos,
@element_size)
end
+
+ def update_size
+ return @data_size if (@size_length == -1)
+ coded_size = Ebml.coded_size(@data_size)
+ @size_length = coded_size if (coded_size > @size_length)
+ return @data_size
+ end
+
+ def master?
+ return false
+ end
end
require "ebml/binary"
Modified: trunk/RbMatroska/mkvinfo.rb
===================================================================
--- trunk/RbMatroska/mkvinfo.rb 2004-09-12 09:34:24 UTC (rev 785)
+++ trunk/RbMatroska/mkvinfo.rb 2004-09-12 10:07:43 UTC (rev 786)
@@ -21,11 +21,11 @@
1.upto(level - 1) { print(" ") }
print("+ ") if (level > 0)
print(element.class.name.gsub(/^Ebml::/, "Ebml").gsub(/^Matroska::/, ""))
- if (element.class.superclass != Ebml::Master)
+ if (!element.master?)
print(" (" + element.to_s + ")")
end
puts(" at " + element.pos.to_s)
- if (element.class.superclass == Ebml::Master)
+ if (element.master?)
element.children.each { |c| dump_rec(c, level + 1) }
end
end
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.