leon 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|