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}
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}
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
|