-/* dist_dna.c 2012-02-14 */
+/* dist_dna.c 2012-11-28 */
/* Copyright 2005-2012 Emmanuel Paradis
}
}
-/* void BaseProportion(unsigned char *x, int *n, double *BF, int *freq) */
-/* { */
-/* int i, m; */
-
-/* m = 0; */
-/* for (i = 0; i < *n; i++) { */
-/* if (KnownBase(x[i])) { */
-/* m++; */
-/* switch (x[i]) { */
-/* case 136 : BF[0]++; break; */
-/* case 40 : BF[1]++; break; */
-/* case 72 : BF[2]++; break; */
-/* case 24 : BF[3]++; break; */
-/* } */
-/* } */
-/* } */
-/* if (! *freq) for (i = 0; i < 4; i++) BF[i] /= m; */
-/* } */
-
-/* void BaseProportion(unsigned char *x, int *n, double *BF) */
-/* { */
-/* int i; */
-
-/* for (i = 0; i < *n; i++) { */
-/* switch (x[i]) { */
-/* case 136 : BF[0]++; break; */
-/* case 40 : BF[1]++; break; */
-/* case 72 : BF[2]++; break; */
-/* case 24 : BF[3]++; break; */
-/* case 192 : BF[4]++; break; */
-/* case 160 : BF[5]++; break; */
-/* case 144 : BF[6]++; break; */
-/* case 96 : BF[7]++; break; */
-/* case 80 : BF[8]++; break; */
-/* case 48 : BF[9]++; break; */
-/* case 224 : BF[10]++; break; */
-/* case 176 : BF[11]++; break; */
-/* case 208 : BF[12]++; break; */
-/* case 112 : BF[13]++; break; */
-/* case 240 : BF[14]++; break; */
-/* case 4 : BF[15]++; break; */
-/* case 2 : BF[16]++; break; */
-/* } */
-/* } */
-/* } */
-
/* a hash table is much faster than switch (2012-01-10) */
void BaseProportion(unsigned char *x, int *n, double *BF)
{
case 17 : distDNA_indelblock(x, n, s, d); break;
}
}
+
+void where(unsigned char *x, unsigned char *pat, int *s, int *p,
+ int *ans, int *n)
+{
+ int i, j, k, ln;
+
+ ln = 0; /* local n */
+
+ for (i = 0; i <= *s - *p; i++) {
+ k = i; j = 0;
+ while (1) {
+ if (x[k] != pat[j]) break;
+ j++; k++;
+ if (j == *p) {
+ ans[ln++] = k - 1;
+ break;
+ }
+ }
+ }
+ *n = ln;
+}