Mercurial > hg > Members > e085722 > Cerium
diff example/test/ppe/Exec.cc @ 0:04e28d8d3c6f
first commit
author | Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 08 Nov 2010 01:23:25 +0900 |
parents | |
children | 2f90ce50a0af |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/test/ppe/Exec.cc Mon Nov 08 01:23:25 2010 +0900 @@ -0,0 +1,54 @@ +#include <stdio.h> +#include <string.h> +#include "Exec.h" +#include "Func.h" +#include "WordGrep.h" + +/* これは必須 */ +SchedDefineTask(Exec); +int str_search(char *r_data,char *sstr,int point); + +//実際のタスク内での処理 +static int run(SchedTask *s, void *rbuf, void *wbuf){ + int *o_data = (int*)wbuf; + char *r_data = (char *)rbuf; + char sstr[10] = "the"; + int len_r_data = (int)strlen(r_data); + int len_sstr = (int)strlen(sstr); + printf("%s : %s\n",sstr,r_data); + int search = 0; + int s_next = 0; + int hits = 0; + while(search+len_sstr <= len_r_data){//残り検索文字列が検索文字列より少なくなるまで + + s_next = len_sstr;//ヒットしない場合は検索文字の文字数分進む + + for(int i = 0;i<len_sstr;i++){ + if(sstr[len_sstr-i-1] == r_data[len_sstr+search-1]){//1文字だけ比較する + if(i == 0){//検索文字の末尾だった場合 + if(strncmp(r_data+search,sstr,len_sstr) == 0){//文字列が一致した場合 + //表示部分 + printf(" hit!->"); + for(int j = 0;j < 10;j++){ + if(r_data[search+j] == 0){ + break; + }else if(r_data[search+j] == '\n') { + s->printf(" "); + }else{ + s->printf("%c",r_data[search+j]); + } + } + printf("\n"); + hits++; + break; + } + }else{//1文字だけヒットした場合 + s_next = i;//その文字分だけ進む + } + } + } + search += s_next; + } + o_data[0] = hits; + return 0; +}