#--
-# $Id: eet.rb 19 2005-03-29 17:02:30Z tilman $
+# $Id: eet.rb 37 2005-05-11 17:23:06Z tilman $
#
# Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de)
#
end
module Eet
- VERSION = "0.1.1"
+ VERSION = "0.1.2"
class EetError < StandardError; end
class NameError < EetError; end
class PropertyError < EetError; end
class ChunkError < EetError; end
- class Stream < Array # :nodoc:
+ class Stream # :nodoc:
def initialize(chunk = nil)
super(chunk.nil? ? 0 : 1, chunk)
end
- def serialize
- inject("") { |a, c| a << c.serialize }
- end
-
def Stream.deserialize(data)
data = data.to_str.dup
s = Stream.new
@tag = tag.to_str.dup.freeze
@data = data.to_str.dup.freeze
- @size = @tag.length + 1 + @data.length
-
# libeet uses a signed 32bit integer to store the
# chunk size, so make sure we don't overflow it
- if @size >= (1 << 31)
+ if (@tag.length + 1 + @data.length) >= (1 << 31)
raise(ArgumentError, "tag or data too long")
end
end
- def serialize
- buf = "CHnK"
- buf << [@size].pack("V")
- buf << @tag << "\0" << @data
- end
-
def Chunk.deserialize(data)
if data.length < 8 || data[0, 4] != "CHnK"
raise(ChunkError, "invalid data")