X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Fdist_dna.c;h=c087212dc1b7477435a1fcf6b69630c6811a3466;hb=b0d1251527d8dd48ca1703b1cfaf217f413eda0e;hp=ab630a9c0b6fcad71b87e0a410c5e6d597b328c5;hpb=21426f51c5940cb37f3198a7853ef59743729b85;p=ape.git diff --git a/src/dist_dna.c b/src/dist_dna.c index ab630a9..c087212 100644 --- a/src/dist_dna.c +++ b/src/dist_dna.c @@ -1,4 +1,4 @@ -/* dist_dna.c 2012-02-14 */ +/* dist_dna.c 2012-11-28 */ /* Copyright 2005-2012 Emmanuel Paradis @@ -1040,52 +1040,6 @@ void distDNA_ParaLin_pairdel(unsigned char *x, int *n, int *s, double *d, } } -/* 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) { @@ -1189,3 +1143,24 @@ void dist_dna(unsigned char *x, int *n, int *s, int *model, double *d, 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; +}