Sha256: 1d7075d483dce873ec3e4ed844dd6fb656787411c94ff12388aab7efcc8d267b

Contents?: true

Size: 833 Bytes

Versions: 1

Compression:

Stored size: 833 Bytes

Contents

# frozen_string_literal: true

module Ssz
  # @example:
  #   ByteBuffer.from_bit_array([1, 0, 0, 0]).bytes #=> "\x01"
  class ByteBuffer
    attr_accessor :bytes

    def initialize(n = 0)
      @bytes = [0] * n
    end

    def self.from_bit_array(bits)
      byte_size = bits.size < 8 ? 1 : (bits.size / 8.0).ceil
      bb = ByteBuffer.new(byte_size)
      bb.bits = bits
      bb
    end

    def bits=(bits)
      byte_size = bits.size < 8 ? 1 : (bits.size / 8.0).ceil
      # fill 0 to fix byte(8-bits)
      while (byte_size * 8) != bits.size do
        bits << 0
      end
      bits.each_with_index do |b, i|
        @bytes[i / 8] |= b << (i % 8)
      end
      bits
    end

    def serialize
      @bytes.pack("C*")
    end

    def length
      @bytes.length
    end

    def bit_size
      length * 8
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ssz-0.1.0 lib/ssz/byte_buffer.rb