biomcmc-lib  0.1
low level library for phylogenetic analysis
Data Structures | Macros | Functions
char_vector.c File Reference

vector of strings (species names, leaf names, etc.) More...

#include "char_vector.h"
Include dependency graph for char_vector.c:

Data Structures

struct  charvec_str


#define kroundup32(x)   (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x))


int compare_charvecstr_decreasing (const void *a, const void *b)
int compare_charvecstr_lexicographic (const void *a, const void *b)
char_vector new_char_vector (int nstrings)
 Create a vector of strings with initial size for each string of zero.
char_vector new_char_vector_big (int nstrings)
 Create vector of strings, and preparing it to realloc() fewer times; used in conjunction with 'append_big'.
char_vector new_char_vector_from_valid_strings_char_vector (char_vector vec, int *valid, int n_valid)
 Create a vector of strings from subset of strings of another char_vector.
char_vector new_char_vector_fixed_length (int nstrings, int nchars)
 Create a vector of strings where each string is assigned an initial value of nchars.
void del_char_vector (char_vector vec)
 Delete vector of strings only after nobody is using it.
void char_vector_link_string_at_position (char_vector vec, const char *string, int position)
 Link a previously allocated string (to avoid copying all characters)
void char_vector_add_string_at_position (char_vector vec, const char *string, int position)
 Add a new string (vector of characters) at specific location.
void char_vector_add_string (char_vector vec, const char *string)
 Add a new string (vector of characters) at next available location.
void char_vector_append_string_at_position (char_vector vec, const char *string, int position)
 Append string at the end of existing string at location.
void char_vector_append_string (char_vector vec, const char *string)
 Append string at the end of existing string at most recently used location.
void char_vector_append_string_big_at_position (char_vector vec, const char *string, int position)
 Append strings like before, but doubling allocation space if insufficient (reduces calls to realloc() )
void char_vector_append_string_big (char_vector vec, const char *string)
void char_vector_finalise_big (char_vector vec)
void char_vector_expand_nstrings (char_vector vec, int new_size)
 Increase size of vector of strings (called automatically by other functions)
void char_vector_reorder_strings_from_external_order (char_vector vec, int *order)
 update order of strings in vector based on a vector of new positions
int char_vector_remove_empty_strings (char_vector vec)
 Reduce size of vector of strings by removing empty strings (returns number of empty strings)
int char_vector_remove_duplicate_strings (char_vector vec)
 Remove identical strings and resizes char_vector_struct.
void char_vector_reduce_to_valid_strings (char_vector vec, int *valid, int n_valid)
 reduce char_string_struct to only those elements indexed by valid[]
void char_vector_reorder_by_size_or_lexicographically (char_vector vec, bool lexico, int *order)
 Order char_vector_struct elements from longer string to smaller, or lexicographically; can be used after calling new_char_vector_from_file() but if topology etc. are associated to it, then order[] must be externally defined and will have new locations, to keep track of changes.
bool char_vector_link_address_if_identical (char_vector *v1, char_vector *v2)
 If the two char_vectors are identical (same strings in same order), then delete one and make it point to the other one.
void index_species_gene_char_vectors (char_vector species, char_vector gene, int *sp_idx_in_gene, int *order_external)
 find occurences of species->string[] inside gene->string[] filling indexes in sp_idx_in_gene. More...
void update_species_count_from_gene_char_vector (char_vector species, char_vector gene, int *sp_count)

Detailed Description

vector of strings (species names, leaf names, etc.)

Function Documentation

◆ index_species_gene_char_vectors()

void index_species_gene_char_vectors ( char_vector  species,
char_vector  gene,
int *  sp_idx_in_gene,
int *  order_external 

find occurences of species->string[] inside gene->string[] filling indexes in sp_idx_in_gene.

The species are taxon names which may be associated with topologies or alignments, such that we can not reorder its elements here (without also modifing e.g. tree leaves). But ordering from longer to shorter is essential for pattern finding, so it is assumed that the char_vector is already sorted UNLESS user provides the ordering.