Sha256: 656f53378258e18ff18c94e6876f99ea0a571569f3623e412fe02514afe0287d

Contents?: true

Size: 1.45 KB

Versions: 5

Compression:

Stored size: 1.45 KB

Contents

JsonBloomfilter.BitArray = (size, field = null) ->
  throw new Error("Missing argument: size") unless size

  @ELEMENT_WIDTH = 32
  @size = size
  @field = field || []

  arrayLength = Math.floor(((size - 1) / @ELEMENT_WIDTH) + 1)
  @field[i] = 0 for i in [0..arrayLength-1] unless field

  this

JsonBloomfilter.BitArray.prototype.add = (position) ->
  @set(position, 1)

JsonBloomfilter.BitArray.prototype.remove = (position) ->
  @set(position, 0)

JsonBloomfilter.BitArray.prototype.set = (position, value) ->
  throw new Error("BitArray index out of bounds") if position >= @size
  aPos = @arrayPosition(position)
  bChange = @bitChange(position)
  if value == 1
    @field[aPos] = @abs(@field[aPos] | bChange)
  else if (@field[aPos] & bChange) != 0
    @field[aPos] = @abs(@field[aPos] ^ bChange)
  true

JsonBloomfilter.BitArray.prototype.get = (position) ->
  throw new Error("BitArray index out of bounds") if position >= @size
  aPos = @arrayPosition(position)
  bChange = @bitChange(position)
  if @abs(@field[aPos] & bChange) > 0
    return 1
  else
    return 0

JsonBloomfilter.BitArray.prototype.arrayPosition = (position) ->
  Math.floor(position / @ELEMENT_WIDTH)

JsonBloomfilter.BitArray.prototype.bitChange = (position) ->
  @abs(1 << position % @ELEMENT_WIDTH)

JsonBloomfilter.BitArray.prototype.abs = (val) ->
  val += 4294967295 if val < 0
  val

JsonBloomfilter.BitArray.prototype.toString = ->
  output = ""
  output += @get(i) for i in [0..@size-1]
  output

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
json-bloomfilter-0.1.5 coffee/bitarray.coffee
json-bloomfilter-0.1.4 coffee/bitarray.coffee
json-bloomfilter-0.1.3 coffee/bitarray.coffee
json-bloomfilter-0.1.2 coffee/bitarray.coffee
json-bloomfilter-0.1.1 coffee/bitarray.coffee