leon 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/string-buffer.rb +97 -6
- metadata +1 -1
data/lib/string-buffer.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'constants'
|
2
|
+
require 'pry'
|
2
3
|
|
3
4
|
module LEON
|
4
5
|
class StringBuffer
|
@@ -125,7 +126,8 @@ module LEON
|
|
125
126
|
}
|
126
127
|
end
|
127
128
|
def writeUInt8(v, i)
|
128
|
-
|
129
|
+
i = normalize(i)
|
130
|
+
if i >= @buffer.length
|
129
131
|
@buffer += v.chr
|
130
132
|
else
|
131
133
|
@buffer = @buffer[0..i] + v.chr + @buffer[(i+1)..-1]
|
@@ -142,7 +144,8 @@ module LEON
|
|
142
144
|
bytez.reverse_each { |v|
|
143
145
|
add += "#{v.chr}"
|
144
146
|
}
|
145
|
-
|
147
|
+
i = normalize(i)
|
148
|
+
if i >= @buffer.length
|
146
149
|
@buffer += add
|
147
150
|
else
|
148
151
|
@buffer = @buffer[0..i] + add + @buffer[(i + 2)..-1]
|
@@ -155,7 +158,8 @@ module LEON
|
|
155
158
|
bytez.each { |v|
|
156
159
|
add += "#{v.chr}"
|
157
160
|
}
|
158
|
-
|
161
|
+
i = normalize(i)
|
162
|
+
if i >= @buffer.length
|
159
163
|
@buffer += add
|
160
164
|
else
|
161
165
|
@buffer = @buffer[0..i] + add + @buffer[(i + 2)..-1]
|
@@ -176,7 +180,8 @@ module LEON
|
|
176
180
|
bytez.reverse_each { |v|
|
177
181
|
add += "#{v.chr}"
|
178
182
|
}
|
179
|
-
|
183
|
+
i = normalize(i)
|
184
|
+
if i >= @buffer.length
|
180
185
|
@buffer += add
|
181
186
|
else
|
182
187
|
@buffer = @buffer[0..i] + add + @buffer[(i + 4)..-1]
|
@@ -189,7 +194,8 @@ module LEON
|
|
189
194
|
bytez.each { |v|
|
190
195
|
add += "#{v.chr}"
|
191
196
|
}
|
192
|
-
|
197
|
+
i = normalize(i)
|
198
|
+
if i >= @buffer.length
|
193
199
|
@buffer += add
|
194
200
|
else
|
195
201
|
@buffer = @buffer[0..i] + add + @buffer[(i + 4)..-1]
|
@@ -206,12 +212,14 @@ module LEON
|
|
206
212
|
end
|
207
213
|
def writeFloatLE(v, i)
|
208
214
|
bytez = StringBuffer.bytes(v, Constants::FLOAT)
|
215
|
+
i = normalize(i)
|
209
216
|
bytez.to_enum.with_index.reverse_each { |v, idx|
|
210
217
|
writeUInt8(v, i + (3 - idx))
|
211
218
|
}
|
212
219
|
return i + 4
|
213
220
|
end
|
214
221
|
def writeFloatBE(v, i)
|
222
|
+
i = normalize(i)
|
215
223
|
bytez = StringBuffer.bytes(v, Constants::FLOAT)
|
216
224
|
bytez.to_enum.with_index.each { |v, idx|
|
217
225
|
writeUInt8(v, i + idx)
|
@@ -219,6 +227,7 @@ module LEON
|
|
219
227
|
return i + 4
|
220
228
|
end
|
221
229
|
def writeDoubleLE(v, i)
|
230
|
+
i = normalize(i)
|
222
231
|
bytez = StringBuffer.bytes(v, Constants::DOUBLE)
|
223
232
|
bytez.to_enum.with_index.reverse_each { |v, idx|
|
224
233
|
writeUInt8(v, i + (7 - idx))
|
@@ -226,6 +235,7 @@ module LEON
|
|
226
235
|
return i + 8
|
227
236
|
end
|
228
237
|
def writeDoubleBE(v, i)
|
238
|
+
i = normalize(i)
|
229
239
|
bytez = StringBuffer.bytes(v, Constants::DOUBLE)
|
230
240
|
bytez.to_enum.with_index.each { |v, idx|
|
231
241
|
writeUInt8(v, i + idx)
|
@@ -233,6 +243,7 @@ module LEON
|
|
233
243
|
return i + 8
|
234
244
|
end
|
235
245
|
def readUInt8(i)
|
246
|
+
i = normalize(i, true)
|
236
247
|
return @buffer[i].ord
|
237
248
|
end
|
238
249
|
def readInt8(i)
|
@@ -243,9 +254,11 @@ module LEON
|
|
243
254
|
return v
|
244
255
|
end
|
245
256
|
def readUInt16LE(i)
|
257
|
+
i = normalize(i, true)
|
246
258
|
return @buffer[i].ord | (@buffer[i + 1].ord << 8)
|
247
259
|
end
|
248
260
|
def readUInt16BE(i)
|
261
|
+
i = normalize(i, true)
|
249
262
|
return (@buffer[i].ord << 8) | @buffer[i + 1].ord
|
250
263
|
end
|
251
264
|
def readInt16LE(i)
|
@@ -263,9 +276,11 @@ module LEON
|
|
263
276
|
return v
|
264
277
|
end
|
265
278
|
def readUInt32LE(i)
|
279
|
+
i = normalize(i, true)
|
266
280
|
return @buffer[i].ord | (@buffer[i + 1].ord << 8) | (@buffer[i + 2].ord << 16) | (@buffer[i + 3].ord << 24)
|
267
281
|
end
|
268
282
|
def readUInt32BE(i)
|
283
|
+
i = normalize(i, true)
|
269
284
|
return (@buffer[i].ord << 24) | (@buffer[i + 1].ord << 16) | (@buffer[i + 2].ord << 8) | @buffer[i + 3].ord
|
270
285
|
end
|
271
286
|
def readInt32LE(i)
|
@@ -284,6 +299,7 @@ module LEON
|
|
284
299
|
end
|
285
300
|
def readFloatLE(i)
|
286
301
|
bytez = Array.new
|
302
|
+
i = normalize(i, true)
|
287
303
|
for j in 0..3
|
288
304
|
bytez.push readUInt8(i + j)
|
289
305
|
end
|
@@ -292,6 +308,7 @@ module LEON
|
|
292
308
|
end
|
293
309
|
def readFloatBE(i)
|
294
310
|
bytez = Array.new
|
311
|
+
i = normalize(i, true)
|
295
312
|
for j in 0..3
|
296
313
|
bytez.push readUInt8(i + j)
|
297
314
|
end
|
@@ -299,6 +316,7 @@ module LEON
|
|
299
316
|
end
|
300
317
|
def readDoubleLE(i)
|
301
318
|
bytez = Array.new
|
319
|
+
i = normalize(i, true)
|
302
320
|
for j in 0..7
|
303
321
|
bytez.push readUInt8(i + j)
|
304
322
|
end
|
@@ -307,13 +325,86 @@ module LEON
|
|
307
325
|
end
|
308
326
|
def readDoubleBE(i)
|
309
327
|
bytez = Array.new
|
328
|
+
i = normalize(i, true)
|
310
329
|
for j in 0..7
|
311
330
|
bytez.push readUInt8(i + j)
|
312
331
|
end
|
313
332
|
return StringBuffer.bytes_to_double(bytez)
|
314
333
|
end
|
315
|
-
def
|
334
|
+
def to_s()
|
316
335
|
return @buffer
|
317
336
|
end
|
337
|
+
def fill(*args)
|
338
|
+
if args.length > 2
|
339
|
+
endOffset = args[2]
|
340
|
+
else
|
341
|
+
endOffset = @buffer.length
|
342
|
+
end
|
343
|
+
if args.length > 1
|
344
|
+
offset = args[1]
|
345
|
+
else
|
346
|
+
offset = 0
|
347
|
+
end
|
348
|
+
val = args[0]
|
349
|
+
add = ''
|
350
|
+
offset = normalize(offset)
|
351
|
+
endOffset = normalize(endOffset)
|
352
|
+
for i in offset..(endOffset - 1)
|
353
|
+
add += val.chr
|
354
|
+
end
|
355
|
+
@buffer = @buffer[0..(offset - 1)] + add + @buffer[endOffset..-1]
|
356
|
+
self
|
357
|
+
end
|
358
|
+
def slice(*args)
|
359
|
+
if args.length > 1
|
360
|
+
endOffset = args[1]
|
361
|
+
else
|
362
|
+
endOffset = @buffer.length
|
363
|
+
end
|
364
|
+
if args.length > 0
|
365
|
+
start = args[0]
|
366
|
+
else
|
367
|
+
start = 0
|
368
|
+
end
|
369
|
+
endOffset = normalize(endOffset, true)
|
370
|
+
start = normalize(start, true)
|
371
|
+
ret = LEON::StringBuffer.new
|
372
|
+
ret.buffer = @buffer[start...(endOffset - start)]
|
373
|
+
ret
|
374
|
+
end
|
375
|
+
def equals(otherBuffer)
|
376
|
+
return @buffer == otherBuffer.buffer
|
377
|
+
end
|
378
|
+
def write(string, offset)
|
379
|
+
offset = normalize(offset)
|
380
|
+
for i in 0...string.length
|
381
|
+
writeUInt8(string[i].ord, offset + i)
|
382
|
+
end
|
383
|
+
end
|
384
|
+
def get(offset)
|
385
|
+
offset = normalize(offset, true)
|
386
|
+
return @buffer[offset].ord
|
387
|
+
end
|
388
|
+
def length
|
389
|
+
return @buffer.length
|
390
|
+
end
|
391
|
+
private
|
392
|
+
def normalize(*args)
|
393
|
+
if (args.length > 1)
|
394
|
+
isRead = args[1]
|
395
|
+
else
|
396
|
+
isRead = false
|
397
|
+
end
|
398
|
+
i = args[0]
|
399
|
+
if (i < 0 and length === 0)
|
400
|
+
return 0
|
401
|
+
end
|
402
|
+
if (i === -1)
|
403
|
+
i = length - (isRead ? 1 : 0)
|
404
|
+
elsif (i < 0)
|
405
|
+
i %= length + (isRead ? 0: 1)
|
406
|
+
end
|
407
|
+
return i;
|
408
|
+
end
|
318
409
|
end
|
319
410
|
end
|