Class: BSON::ByteBuffer
- Inherits:
-
Object
show all
- Includes:
- Grow
- Defined in:
- lib/bson/byte_buffer.rb
Direct Known Subclasses
Binary
Constant Summary
collapse
- INT32_PACK =
'l<'.freeze
- INT64_PACK =
'q<'.freeze
- DOUBLE_PACK =
'E'.freeze
Instance Attribute Summary collapse
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
Methods included from Grow
#array, #array!, #b_do, #b_do!, #b_end, #b_end!, #clear!, #doc, #doc!, #finish!, #finish_one!, #grow, #grow!, #push, #push!, #push_doc, #push_doc!, #to_e, #to_t, #to_v, #unfinish!
Constructor Details
#initialize(initial_data = "", max_size = DEFAULT_MAX_BSON_SIZE) ⇒ ByteBuffer
Returns a new instance of ByteBuffer.
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# 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
|
Instance Attribute Details
#max_size ⇒ Object
Returns the value of attribute max_size.
21
22
23
|
# File 'lib/bson/byte_buffer.rb', line 21
def max_size
@max_size
end
|
#order ⇒ Object
Returns the value of attribute order.
21
22
23
|
# File 'lib/bson/byte_buffer.rb', line 21
def order
@order
end
|
Instance Method Details
#==(other) ⇒ Object
197
198
199
|
# File 'lib/bson/byte_buffer.rb', line 197
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.
69
70
71
72
|
# File 'lib/bson/byte_buffer.rb', line 69
def append!(buffer)
@str << buffer.to_s
self
end
|
#clear ⇒ Object
57
58
59
60
61
|
# File 'lib/bson/byte_buffer.rb', line 57
def clear
@str = ""
@str.force_encoding('binary') if @str.respond_to?(:force_encoding)
rewind
end
|
#dump ⇒ Object
213
214
215
216
217
218
|
# 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) ⇒ Object
145
146
147
148
149
150
151
152
153
154
155
156
|
# 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 ⇒ Object
186
187
188
189
190
191
|
# 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 ⇒ Object
172
173
174
175
176
177
|
# 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 ⇒ Object
179
180
181
182
183
184
|
# 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? ⇒ Boolean
193
194
195
|
# File 'lib/bson/byte_buffer.rb', line 193
def more?
@cursor < @str.size
end
|
#position ⇒ Object
49
50
51
|
# File 'lib/bson/byte_buffer.rb', line 49
def position
@cursor
end
|
#position=(val) ⇒ Object
53
54
55
|
# File 'lib/bson/byte_buffer.rb', line 53
def position=(val)
@cursor = val
end
|
#prepend!(buffer) ⇒ Object
Prepends a second ByteBuffer object, buffer
, to the current buffer.
75
76
77
78
|
# File 'lib/bson/byte_buffer.rb', line 75
def prepend!(buffer)
@str = buffer.to_s + @str
self
end
|
#put(byte, offset = nil) ⇒ Object
80
81
82
83
84
85
86
87
88
89
|
# 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) ⇒ Object
105
106
107
108
109
110
111
112
113
114
|
# 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) ⇒ Object
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# 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) ⇒ Object
136
137
138
139
140
|
# 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) ⇒ Object
128
129
130
|
# 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) ⇒ Object
132
133
134
|
# 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) ⇒ Object
116
117
118
119
120
121
122
123
124
125
126
|
# 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 ⇒ Object
45
46
47
|
# File 'lib/bson/byte_buffer.rb', line 45
def rewind
@cursor = 0
end
|
#size ⇒ Object
Also known as:
length
63
64
65
|
# File 'lib/bson/byte_buffer.rb', line 63
def size
@str.size
end
|
#to_a(format = "C*") ⇒ Object
201
202
203
|
# File 'lib/bson/byte_buffer.rb', line 201
def to_a(format="C*")
@str.unpack(format)
end
|
#to_s ⇒ Object
209
210
211
|
# File 'lib/bson/byte_buffer.rb', line 209
def to_s
@str
end
|
#unpack(format = "C*") ⇒ Object
205
206
207
|
# File 'lib/bson/byte_buffer.rb', line 205
def unpack(format="C*")
to_a(format)
end
|