Mercurial > hg > Members > kono > Cerium
comparison example/word_count_run16array/ppe/Exec.cc @ 806:32584e896fe7
add word_count_run16array
author | yutaka@localhost.localdomain |
---|---|
date | Fri, 21 May 2010 19:00:48 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
805:daab9cd6f91f | 806:32584e896fe7 |
---|---|
1 #include <stdio.h> | |
2 #include <string.h> | |
3 #include "Exec.h" | |
4 #include "Func.h" | |
5 | |
6 /* これは必須 */ | |
7 SchedDefineTask(Exec); | |
8 | |
9 static int | |
10 run(SchedTask *s, void *rbuf, void *wbuf) | |
11 { | |
12 char *i_data = (char *)rbuf; | |
13 unsigned long long *o_data = (unsigned long long*)wbuf; | |
14 unsigned long long *head_tail_flag = o_data +2; | |
15 int length = (int)s->get_param(0); | |
16 int word_flag = 0; | |
17 int word_num = 0; | |
18 int line_num = 0; | |
19 int i = 0; | |
20 | |
21 head_tail_flag[0] = (i_data[0] != 0x20) && (i_data[0] != 0x0A); | |
22 word_num -= 1-head_tail_flag[0]; | |
23 | |
24 for (; i < length; i++) { | |
25 if (i_data[i] == 0x20) { | |
26 word_flag = 1; | |
27 } else if (i_data[i] == 0x0A) { | |
28 line_num += 1; | |
29 word_flag = 1; | |
30 } else { | |
31 word_num += word_flag; | |
32 word_flag = 0; | |
33 } | |
34 } | |
35 | |
36 word_num += word_flag; | |
37 head_tail_flag[1] = (i_data[i-1] != 0x20) && (i_data[i-1] != 0x0A); | |
38 | |
39 // s->printf("SPE word %d line %d\n",word_num,line_num); | |
40 | |
41 o_data[0] = (unsigned long long)word_num; | |
42 o_data[1] = (unsigned long long)line_num; | |
43 | |
44 return 0; | |
45 } |