class BSON::ByteBuffer
Constants
- DOUBLE_PACK
- INT32_PACK
- INT64_PACK
Attributes
max_size[R]
order[R]
Public Class Methods
new(initial_data="", max_size=DEFAULT_MAX_BSON_SIZE)
click to toggle source
# File lib/bson/byte_buffer.rb, line 27 def initialize(initial_data="", max_size=DEFAULT_MAX_BSON_SIZE) @str = case initial_data when String then if initial_data.respond_to?(:force_encoding) initial_data.force_encoding('binary') else initial_data end when BSON::ByteBuffer then initial_data.to_a.pack('C*') else initial_data.pack('C*') end @cursor = @str.length @max_size = max_size end
Public Instance Methods
==(other)
click to toggle source
# File lib/bson/byte_buffer.rb, line 197 def ==(other) other.respond_to?(:to_s) && @str == other.to_s end
append!(buffer)
click to toggle source
Appends a second ByteBuffer object,
buffer
, to the current buffer.
# File lib/bson/byte_buffer.rb, line 69 def append!(buffer) @str << buffer.to_s self end
clear()
click to toggle source
# File lib/bson/byte_buffer.rb, line 57 def clear @str = "" @str.force_encoding('binary') if @str.respond_to?(:force_encoding) rewind end
dump()
click to toggle source
# File lib/bson/byte_buffer.rb, line 213 def dump @str.each_byte do |c, i| $stderr.puts "#{'%04d' % i}: #{'%02x' % c} #{'%03o' % c} #{'%s' % c.chr} #{'%3d' % c}" i += 1 end end
get(len=nil)
click to toggle source
# File lib/bson/byte_buffer.rb, line 145 def get(len=nil) one_byte = len.nil? len ||= 1 check_read_length(len) start = @cursor @cursor += len if one_byte @str[start] else @str[start, len].unpack("C*") end end
get_double()
click to toggle source
# File lib/bson/byte_buffer.rb, line 186 def get_double check_read_length(8) vals = @str[@cursor..@cursor+7] @cursor += 8 vals.unpack(DOUBLE_PACK)[0] end
get_int()
click to toggle source
# File lib/bson/byte_buffer.rb, line 172 def get_int check_read_length(4) vals = @str[@cursor..@cursor+3] @cursor += 4 vals.unpack(INT32_PACK)[0] end
get_long()
click to toggle source
# File lib/bson/byte_buffer.rb, line 179 def get_long check_read_length(8) vals = @str[@cursor..@cursor+7] @cursor += 8 vals.unpack(INT64_PACK)[0] end
more?()
click to toggle source
# File lib/bson/byte_buffer.rb, line 193 def more? @cursor < @str.size end
position()
click to toggle source
# File lib/bson/byte_buffer.rb, line 49 def position @cursor end
position=(val)
click to toggle source
# File lib/bson/byte_buffer.rb, line 53 def position=(val) @cursor = val end
prepend!(buffer)
click to toggle source
Prepends a second ByteBuffer object,
buffer
, to the current buffer.
# File lib/bson/byte_buffer.rb, line 75 def prepend!(buffer) @str = buffer.to_s + @str self end
put(byte, offset=nil)
click to toggle source
# File lib/bson/byte_buffer.rb, line 80 def put(byte, offset=nil) @cursor = offset if offset if more? @str[@cursor] = chr(byte) else ensure_length(@cursor) @str << chr(byte) end @cursor += 1 end
put_array(array, offset=nil)
click to toggle source
# File lib/bson/byte_buffer.rb, line 105 def put_array(array, offset=nil) @cursor = offset if offset if more? @str[@cursor, array.length] = array.pack("C*") else ensure_length(@cursor) @str << array.pack("C*") end @cursor += array.length end
put_binary(data, offset=nil)
click to toggle source
# File lib/bson/byte_buffer.rb, line 91 def put_binary(data, offset=nil) @cursor = offset if offset if defined?(BINARY_ENCODING) data = data.dup.force_encoding(BINARY_ENCODING) end if more? @str[@cursor, data.length] = data else ensure_length(@cursor) @str << data end @cursor += data.length end
put_double(d, offset=nil)
click to toggle source
# File lib/bson/byte_buffer.rb, line 136 def put_double(d, offset=nil) a = [] [d].pack(DOUBLE_PACK).each_byte { |b| a << b } put_array(a, offset) end
put_int(i, offset=nil)
click to toggle source
# File lib/bson/byte_buffer.rb, line 128 def put_int(i, offset=nil) put_num(i, offset, 4) end
put_long(i, offset=nil)
click to toggle source
# File lib/bson/byte_buffer.rb, line 132 def put_long(i, offset=nil) put_num(i, offset, 8) end
put_num(i, offset, bytes)
click to toggle source
# File lib/bson/byte_buffer.rb, line 116 def put_num(i, offset, bytes) pack_type = bytes == 4 ? INT32_PACK : INT64_PACK @cursor = offset if offset if more? @str[@cursor, bytes] = [i].pack(pack_type) else ensure_length(@cursor) @str << [i].pack(pack_type) end @cursor += bytes end
rewind()
click to toggle source
# File lib/bson/byte_buffer.rb, line 45 def rewind @cursor = 0 end
size()
click to toggle source
# File lib/bson/byte_buffer.rb, line 63 def size @str.size end
Also aliased as: length
to_a(format="C*")
click to toggle source
# File lib/bson/byte_buffer.rb, line 201 def to_a(format="C*") @str.unpack(format) end
to_s()
click to toggle source
# File lib/bson/byte_buffer.rb, line 209 def to_s @str end
unpack(format="C*")
click to toggle source
# File lib/bson/byte_buffer.rb, line 205 def unpack(format="C*") to_a(format) end
Private Instance Methods
check_read_length(len)
click to toggle source
# File lib/bson/byte_buffer.rb, line 236 def check_read_length(len) raise "attempt to read past end of buffer" if @cursor + len > @str.length end
chr(byte)
click to toggle source
# File lib/bson/byte_buffer.rb, line 228 def chr(byte) if byte < 0 [byte].pack('c') else byte.chr end end
ensure_length(length)
click to toggle source
# File lib/bson/byte_buffer.rb, line 222 def ensure_length(length) if @str.size < length @str << NULL_BYTE * (length - @str.size) end end