void HashGraph::AddAllEdges() { num_edges = 0; #pragma omp parallel for for (int64 i = 0; i < (int64)table_size; ++i) { for (HashNode *node = table[i]; node; node = node->next) { node->SetInEdges(15); node->SetOutEdges(15); } } }
void HashGraph::RefreshEdges() { num_edges = 0; #pragma omp parallel for for (int64 i = 0; i < (int64)table_size; ++i) { for (HashNode *node = table[i]; node; node = node->next) { KmerNodeAdapter curr(node); for (int strand = 0; strand < 2; ++strand) { Kmer kmer; curr.GetKmer(kmer); unsigned edges = curr.OutEdges(); for (int x = 0; x < 4; ++x) { if (edges & (1 << x)) { Kmer next = kmer; next.AddRight(x); if (GetNode(next) == NULL) curr.RemoveOutEdge(x); else { #pragma omp atomic ++num_edges; } } } curr.ReverseComplement(); } if (node->kmer.IsPalindrome()) { unsigned edges = node->InEdges() | node->OutEdges(); node->SetInEdges(edges); node->SetOutEdges(edges); } } } num_edges >>= 1; }