Mercurial > hg > Game > Cerium
annotate example/regex_mas/ppe/Exec.cc @ 1775:72e8c18bfbf6 draft
End moving BMskip_table
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 23 Nov 2013 18:00:06 +0900 |
parents | 39734c8cbcfe |
children | 1c429035e0d1 |
rev | line source |
---|---|
1598 | 1 #include <stdio.h> |
2 #include <string.h> | |
3 #include "Exec.h" | |
4 #include "Func.h" | |
1638 | 5 #include "SchedTask.h" |
1621
f907bbac14f2
Implement Boyer-Moore String Search Algorithm.(But incomplete divided file point)
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1620
diff
changeset
|
6 #define max(a,b)((a)>(b)?a:b) |
1630 | 7 |
1598 | 8 /* これは必須 */ |
9 SchedDefineTask(Exec); | |
1630 | 10 |
1621
f907bbac14f2
Implement Boyer-Moore String Search Algorithm.(But incomplete divided file point)
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1620
diff
changeset
|
11 //ボイヤームーア法による文字列検索アルゴリズム |
1775
72e8c18bfbf6
End moving BMskip_table
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1774
diff
changeset
|
12 static int BM_method(unsigned char *text,int text_len, |
72e8c18bfbf6
End moving BMskip_table
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1774
diff
changeset
|
13 unsigned char *pattern,int sw_len,int *skip) |
1621
f907bbac14f2
Implement Boyer-Moore String Search Algorithm.(But incomplete divided file point)
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1620
diff
changeset
|
14 { |
1775
72e8c18bfbf6
End moving BMskip_table
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1774
diff
changeset
|
15 |
72e8c18bfbf6
End moving BMskip_table
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1774
diff
changeset
|
16 int i = sw_len - 1; |
1662 | 17 int match_counter = 0; |
1621
f907bbac14f2
Implement Boyer-Moore String Search Algorithm.(But incomplete divided file point)
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1620
diff
changeset
|
18 |
f907bbac14f2
Implement Boyer-Moore String Search Algorithm.(But incomplete divided file point)
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1620
diff
changeset
|
19 while ( i < text_len){ |
1775
72e8c18bfbf6
End moving BMskip_table
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1774
diff
changeset
|
20 int j = sw_len - 1; |
1621
f907bbac14f2
Implement Boyer-Moore String Search Algorithm.(But incomplete divided file point)
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1620
diff
changeset
|
21 while (text[i] == pattern[j]){ |
f907bbac14f2
Implement Boyer-Moore String Search Algorithm.(But incomplete divided file point)
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1620
diff
changeset
|
22 if (j == 0){ |
1662 | 23 match_counter++; |
1621
f907bbac14f2
Implement Boyer-Moore String Search Algorithm.(But incomplete divided file point)
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1620
diff
changeset
|
24 } |
f907bbac14f2
Implement Boyer-Moore String Search Algorithm.(But incomplete divided file point)
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1620
diff
changeset
|
25 --i; |
f907bbac14f2
Implement Boyer-Moore String Search Algorithm.(But incomplete divided file point)
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1620
diff
changeset
|
26 --j; |
f907bbac14f2
Implement Boyer-Moore String Search Algorithm.(But incomplete divided file point)
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1620
diff
changeset
|
27 } |
1775
72e8c18bfbf6
End moving BMskip_table
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1774
diff
changeset
|
28 i = i + max((int)skip[(int)text[i]],sw_len - j); |
1621
f907bbac14f2
Implement Boyer-Moore String Search Algorithm.(But incomplete divided file point)
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1620
diff
changeset
|
29 } |
1662 | 30 return match_counter; |
1621
f907bbac14f2
Implement Boyer-Moore String Search Algorithm.(But incomplete divided file point)
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1620
diff
changeset
|
31 } |
1598 | 32 |
33 static int | |
34 run(SchedTask *s, void *rbuf, void *wbuf) | |
35 { | |
1740 | 36 unsigned char *i_data = (unsigned char *)s->get_input(rbuf,0); |
1744
68e5872085ff
set_inData(rbuf,1) bugs? same address get_input Data in regex_mas
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1743
diff
changeset
|
37 unsigned char *search_word = (unsigned char*)s->get_input(rbuf,1); |
1774
39734c8cbcfe
To created BMsearch skip table method move Exec.cc to main.cc:run_start
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1761
diff
changeset
|
38 int *skip_table = (int *)s->get_input(rbuf,2); |
1743
36eb8c21281a
remove warning in regex_mas
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1740
diff
changeset
|
39 int length = (int)s->get_inputSize(0); |
1759 | 40 int sw_len = (int)s->get_inputSize(1); |
1774
39734c8cbcfe
To created BMsearch skip table method move Exec.cc to main.cc:run_start
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1761
diff
changeset
|
41 |
1761
b98e23499add
refactoring in regex_mas
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1759
diff
changeset
|
42 unsigned long long *o_data = (unsigned long long*)wbuf; |
b98e23499add
refactoring in regex_mas
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1759
diff
changeset
|
43 |
1775
72e8c18bfbf6
End moving BMskip_table
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1774
diff
changeset
|
44 //unsigned char search_word[] = "doing"; |
72e8c18bfbf6
End moving BMskip_table
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
1774
diff
changeset
|
45 o_data[0] = BM_method(i_data,length,search_word,sw_len,skip_table); |
1662 | 46 |
1645
4698c92bf2ca
Regex_mas implement time measurement.
Masa <e085726@ie.u-ryukyu.ac.jp>
parents:
1644
diff
changeset
|
47 //s->printf("in Exec.cc\n"); |
1598 | 48 return 0; |
49 } |