Method: Codec::Bitmap#encode

Defined in:
lib/codec/bitmap.rb

#encode(field) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/codec/bitmap.rb', line 44

def encode(field)
  fields = field.get_value 
  encoded_fields = []
  fields_list = fields.collect{|sf| sf.get_id.to_i}
  # Add field for bitmaps
  bitmap_fields = @num_extended_bitmaps[0,(fields_list.last - 1) / bitmap_length]
  fields_list +=  bitmap_fields
  fields += bitmap_fields.collect {|id| Field.new(id)}
  fields.sort!{|a,b| a.get_id.to_i <=> b.get_id.to_i}
  # Encode first bitmap
  out = encode_bitmap(fields_list,0)
  bitmap_index = 1
  fields.each do |sf|
    codec = @subCodecs[sf.get_id]
    if @num_extended_bitmaps.include?(sf.get_id)
      out += encode_bitmap(fields_list,bitmap_index)
      bitmap_index += 1
    elsif codec.nil?
      raise EncodingException, "unknown codec for subfield #{sf.get_id}"
    elsif encoded_fields.include?(sf.get_id.to_i)
      raise EncodingException, "Multiple subfield #{sf.get_id} is invalid for Codec::Bitmap"
    else
      out += codec.encode(sf)
    end
    encoded_fields << sf.get_id.to_i
  end
  return out
end