def initialize()
@sequences = Array.new
@identical_seqs_detected = Array.new
+ @name_to_seq_indices = Hash.new
+ @namestart_to_seq_indices = Hash.new
end
" sequences"
raise ArgumentError, error_msg
end
+ @name_to_seq_indices.clear
+ @namestart_to_seq_indices.clear
@sequences.delete_at( index )
end
end
def find_by_name( name, case_sensitive, partial_match )
+ if case_sensitive && !partial_match && @name_to_seq_indices.has_key?( name )
+ return @name_to_seq_indices[ name ]
+ end
indices = Array.new()
for i in 0 ... get_number_of_seqs()
current_name = get_sequence( i ).get_name()
indices.push( i )
end
end
+ if case_sensitive && !partial_match
+ @name_to_seq_indices[ name ] = indices
+ end
indices
end
end
def find_by_name_start( name, case_sensitive )
+ if case_sensitive && @namestart_to_seq_indices.has_key?( name )
+ return @namestart_to_seq_indices[ name ]
+ end
indices = []
for i in 0 ... get_number_of_seqs()
get_sequence( i ).get_name() =~ /^\s*(\S+)/
current_name = current_name.downcase
name = name.downcase
end
- if ( current_name == name )
+ if current_name == name
indices.push( i )
end
end
+ if case_sensitive
+ @namestart_to_seq_indices[ name ] = indices
+ end
indices
end
# throws ArgumentError
def get_by_name_start( name, case_sensitive = true )
indices = find_by_name_start( name, case_sensitive )
- if ( indices.length > 1 )
+ if indices.length > 1
error_msg = "\"" + name + "\" not unique"
raise ArgumentError, error_msg
- elsif ( indices.length < 1 )
+ elsif indices.length < 1
error_msg = "\"" + name + "\" not found"
raise ArgumentError, error_msg
end