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.
Files changed (2) hide show
  1. data/lib/string-buffer.rb +97 -6
  2. 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
- if i === -1 or i >= @buffer.length
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
- if i >= @buffer.length or i === -1
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
- if i >= @buffer.length or i === -1
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
- if i >= @buffer.length or i === -1
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
- if i >= @buffer.length or i === -1
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 toString()
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leon
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: