lib/pgvector/bit.rb



module Pgvector
  class Bit
    def initialize(data)
      if data.is_a?(Array)
        @data = data.map { |v| v ? "1" : "0" }.join
      else
        @data = data.to_str
      end
    end

    def self.from_text(string)
      Bit.new(string)
    end

    def self.from_binary(string)
      length, data = string.unpack("l>B*")
      Bit.new(data[...length])
    end

    def to_s
      @data
    end

    def to_a
      @data.each_char.map { |v| v != "0" }
    end

    def to_binary
      [@data.length, @data].pack("l>B*")
    end
  end
end