view example/test/ppe/Exec.cc @ 5:8f445f1bfe66 default tip

3d camera
author Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp>
date Mon, 06 Dec 2010 17:20:56 +0900
parents 3f6fe22ac669
children
line wrap: on
line source

#include <stdio.h>
#include <string.h>
#include "Exec.h"
#include "Func.h"
#include "WordGrep.h"

/* これは必須 */
SchedDefineTask(Exec);
void print(SchedTask *s,char *r_data);

//実際のタスク内での処理
static int run(SchedTask *s, void *rbuf, void *wbuf){
	//int *o_data = (int*)wbuf;
	//int *o_data = (int *)s->get_output(wbuf, 0);
	char *r_data = (char *)s->get_input(rbuf,0);

	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){//文字列が一致した場合
						print(s,&r_data[search]);
						hits++;
					}
				}else if(i < s_next){//1文字だけヒットした場合
					s_next = i;//その文字分だけ進む
				}
			}
		}
		search += s_next;
	}
	//o_data[0] = hits;
	return 0;
}

//表示部分
void print(SchedTask *s,char *r_data){
	s->printf("  hit : ");
	for(int j = 0;j < 5;j++){
		if(r_data[j] == 0){
			break;
		}else{
			s->printf("%c",r_data[j]);
		}
	}
	s->printf("\n");
}