view example/test/spe/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 9a61a58604e7
line wrap: on
line source

#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){
	Grep *r_buf = *(Grep**)rbuf;
	int *o_data = (int*)wbuf;
	*o_data = 0;
	char *r_data = r_buf->read_buf;
	char *sstr = r_buf->read_sstr;
	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]){
				if(i == 0){
					s_next = len_sstr;
					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{
					s_next = i;
				}
			}
		}
		search += s_next;
	}
	o_data[0] = hits;
	return 0;
}