leon 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: