offset . Add_Offset (ht [sig] . ref [j] . string_num, ht [sig] . ref [j] . pos - pos);
{ int  b = ht [sig] . ref [j] . string_num;  if  (i < b) offset . Add_Offset (ht [sig] . ref [j] . string_num, ht [sig] . ref [j] . pos - pos); }
static void  Find_Rev_Overlaps    (vector <char *> & string_list,     hash_map <unsigned int, Hash_Entry_t> & ht,     const vector <ID_t> & id_list, BankStream_t & overlap_bank)//  Find all overlaps between pairs of strings in  string_list//  where the lower-numbered string is in the reverse orientation//  the higher-numbered string is in the forward orientation.//  Overlaps are found only if the sequences share//  a minimizer in  ht .  {   Minimizer_t  mini (Minimizer_Window_Len);   Offset_Entry_t  offset;   Simple_Overlap_t  olap;   double  erate;   int  i, j, n, p;   n = string_list . size ();   offset . ct = 0;   for  (i = 0;  i < n;  i ++)     {      char  * s;      unsigned int  sig;      int  pos, new_pos;      int  k, m, p;      Reverse_Complement (string_list [i]);      s = string_list [i];      m = strlen (s);      if  (m < Minimizer_Window_Len)          continue;      mini . Init (s);      sig = mini . Get_Signature ();      pos = mini . Get_Window_Offset ();      if  (ht . find (sig) != ht . end ())          for  (j = 0;  j < ht [sig] . ct;  j ++)            offset . Add_Offset (ht [sig] . ref [j] . string_num,                 ht [sig] . ref [j] . pos - pos);      k = Minimizer_Window_Len;      for  (p = 1;  p <= m - Minimizer_Window_Len;  p ++, k++)        {         mini . Advance (s [k]);         new_pos = p + mini . Get_Window_Offset ();         if  (new_pos > pos)             {              sig = mini . Get_Signature ();              if  (ht . find (sig) != ht . end ())                  for  (j = 0;  j < ht [sig] . ct;  j ++)                    {                     int  b = ht [sig] . ref [j] . string_num;                     if  (i < b)                         offset . Add_Offset (b,                              ht [sig] . ref [j] . pos - pos);                    }              pos = new_pos;             }        }      for  (j = 0;  j < offset . ct;  j ++)        {         int  b = offset . off [j] . string_num;         int  lo, hi;#if  USE_SIMPLE_OVERLAP         Simple_Overlap (string_list [i], strlen (string_list [i]),              string_list [b], strlen (string_list [b]), olap);#else         lo = Max (offset . off [j] . lo_offset - 5,                     - int (strlen (string_list [i])));         hi = Min (offset . off [j] . hi_offset + 5,                     int (strlen (string_list [b])));         Banded_Overlap (string_list [i], strlen (string_list [i]),              string_list [b], strlen (string_list [b]), lo, hi, olap);#endif         if  (olap . a_olap_len < Min_Overlap_Len                 || olap . b_olap_len < Min_Overlap_Len)             continue;         erate = (2.0 * olap . errors)             / (olap . a_olap_len + olap . b_olap_len);         if  (erate <= Error_Rate)             {              int  save;              // Re-orient with a forward and b reversed              save = olap . a_hang;              olap . a_hang = - olap . b_hang;              olap . b_hang = - save;              olap . a_id = id_list [i];              olap . b_id = id_list [b];              olap . flipped = true;              Output (cout, overlap_bank, olap);             }        }      if  (offset . ct > 0)          {           free (offset . off);           offset . ct = 0;          }     }   return;  }