diff example/grep/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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/grep/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;
+}