Class: BSON::ByteBuffer
- Inherits:
-
Object
- Object
- BSON::ByteBuffer
- Defined in:
- lib/bson/byte_buffer.rb
Direct Known Subclasses
Constant Summary collapse
- INT32_PACK =
'l<'.freeze
- INT64_PACK =
'q<'.freeze
- DOUBLE_PACK =
'E'.freeze
Instance Attribute Summary collapse
-
#max_size ⇒ Object
readonly
Returns the value of attribute max_size.
-
#order ⇒ Object
readonly
Returns the value of attribute order.
Instance Method Summary collapse
- #==(other) ⇒ Object
-
#append!(buffer) ⇒ Object
Appends a second ByteBuffer object,
buffer
, to the current buffer. - #clear ⇒ Object
- #dump ⇒ Object
- #get(len = nil) ⇒ Object
- #get_double ⇒ Object
- #get_int ⇒ Object
- #get_long ⇒ Object
-
#initialize(initial_data = "", max_size = DEFAULT_MAX_BSON_SIZE) ⇒ ByteBuffer
constructor
A new instance of ByteBuffer.
- #more? ⇒ Boolean
- #position ⇒ Object
- #position=(val) ⇒ Object
-
#prepend!(buffer) ⇒ Object
Prepends a second ByteBuffer object,
buffer
, to the current buffer. - #put(byte, offset = nil) ⇒ Object
- #put_array(array, offset = nil) ⇒ Object
- #put_binary(data, offset = nil) ⇒ Object
- #put_double(d, offset = nil) ⇒ Object
- #put_int(i, offset = nil) ⇒ Object
- #put_long(i, offset = nil) ⇒ Object
- #put_num(i, offset, bytes) ⇒ Object
- #rewind ⇒ Object
- #size ⇒ Object (also: #length)
- #to_a(format = "C*") ⇒ Object
- #to_s ⇒ Object
- #unpack(format = "C*") ⇒ Object
Constructor Details
#initialize(initial_data = "", max_size = DEFAULT_MAX_BSON_SIZE) ⇒ ByteBuffer
Returns a new instance of ByteBuffer.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/bson/byte_buffer.rb', line 11 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 |
Instance Attribute Details
#max_size ⇒ Object (readonly)
Returns the value of attribute max_size.
5 6 7 |
# File 'lib/bson/byte_buffer.rb', line 5 def max_size @max_size end |
#order ⇒ Object (readonly)
Returns the value of attribute order.
5 6 7 |
# File 'lib/bson/byte_buffer.rb', line 5 def order @order end |
Instance Method Details
#==(other) ⇒ Object
181 182 183 |
# File 'lib/bson/byte_buffer.rb', line 181 def ==(other) other.respond_to?(:to_s) && @str == other.to_s end |
#append!(buffer) ⇒ Object
Appends a second ByteBuffer object, buffer
, to the current buffer.
53 54 55 56 |
# File 'lib/bson/byte_buffer.rb', line 53 def append!(buffer) @str << buffer.to_s self end |
#clear ⇒ Object
41 42 43 44 45 |
# File 'lib/bson/byte_buffer.rb', line 41 def clear @str = "" @str.force_encoding('binary') if @str.respond_to?(:force_encoding) rewind end |
#dump ⇒ Object
197 198 199 200 201 202 |
# File 'lib/bson/byte_buffer.rb', line 197 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) ⇒ Object
129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/bson/byte_buffer.rb', line 129 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 ⇒ Object
170 171 172 173 174 175 |
# File 'lib/bson/byte_buffer.rb', line 170 def get_double check_read_length(8) vals = @str[@cursor..@cursor+7] @cursor += 8 vals.unpack(DOUBLE_PACK)[0] end |
#get_int ⇒ Object
156 157 158 159 160 161 |
# File 'lib/bson/byte_buffer.rb', line 156 def get_int check_read_length(4) vals = @str[@cursor..@cursor+3] @cursor += 4 vals.unpack(INT32_PACK)[0] end |
#get_long ⇒ Object
163 164 165 166 167 168 |
# File 'lib/bson/byte_buffer.rb', line 163 def get_long check_read_length(8) vals = @str[@cursor..@cursor+7] @cursor += 8 vals.unpack(INT64_PACK)[0] end |
#more? ⇒ Boolean
177 178 179 |
# File 'lib/bson/byte_buffer.rb', line 177 def more? @cursor < @str.size end |
#position ⇒ Object
33 34 35 |
# File 'lib/bson/byte_buffer.rb', line 33 def position @cursor end |
#position=(val) ⇒ Object
37 38 39 |
# File 'lib/bson/byte_buffer.rb', line 37 def position=(val) @cursor = val end |
#prepend!(buffer) ⇒ Object
Prepends a second ByteBuffer object, buffer
, to the current buffer.
59 60 61 62 |
# File 'lib/bson/byte_buffer.rb', line 59 def prepend!(buffer) @str = buffer.to_s + @str self end |
#put(byte, offset = nil) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/bson/byte_buffer.rb', line 64 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) ⇒ Object
89 90 91 92 93 94 95 96 97 98 |
# File 'lib/bson/byte_buffer.rb', line 89 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) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/bson/byte_buffer.rb', line 75 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) ⇒ Object
120 121 122 123 124 |
# File 'lib/bson/byte_buffer.rb', line 120 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) ⇒ Object
112 113 114 |
# File 'lib/bson/byte_buffer.rb', line 112 def put_int(i, offset=nil) put_num(i, offset, 4) end |
#put_long(i, offset = nil) ⇒ Object
116 117 118 |
# File 'lib/bson/byte_buffer.rb', line 116 def put_long(i, offset=nil) put_num(i, offset, 8) end |
#put_num(i, offset, bytes) ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/bson/byte_buffer.rb', line 100 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 ⇒ Object
29 30 31 |
# File 'lib/bson/byte_buffer.rb', line 29 def rewind @cursor = 0 end |
#size ⇒ Object Also known as: length
47 48 49 |
# File 'lib/bson/byte_buffer.rb', line 47 def size @str.size end |
#to_a(format = "C*") ⇒ Object
185 186 187 |
# File 'lib/bson/byte_buffer.rb', line 185 def to_a(format="C*") @str.unpack(format) end |
#to_s ⇒ Object
193 194 195 |
# File 'lib/bson/byte_buffer.rb', line 193 def to_s @str end |
#unpack(format = "C*") ⇒ Object
189 190 191 |
# File 'lib/bson/byte_buffer.rb', line 189 def unpack(format="C*") to_a(format) end |