Mercurial > hg > Members > kono > Cerium
diff example/word_count/spe/Exec.cc @ 946:a8b6ee80c108
unify word count examples....
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 01 Aug 2010 21:05:35 +0900 |
parents | 7ac03079a2b2 |
children | f8e9c985e2a8 |
line wrap: on
line diff
--- a/example/word_count/spe/Exec.cc Sun Aug 01 19:29:27 2010 +0900 +++ b/example/word_count/spe/Exec.cc Sun Aug 01 21:05:35 2010 +0900 @@ -9,40 +9,34 @@ static int run(SchedTask *s, void *rbuf, void *wbuf) { - char *i_data = (char*)s->get_input(rbuf, 0); - unsigned long long *o_data = (unsigned long long*)s->get_output(wbuf, 0); - int length = (int)s->get_param(0); - //int length = s->read_size(); - int word_flag = 1-(int)s->get_param(1); - //int word_flag = (int)s->get_param(1); + char *i_data = (char *)rbuf; + unsigned long long *o_data = (unsigned long long*)wbuf; + unsigned long long *head_tail_flag = o_data +2; + int length = (int)s->get_inputSize(0); + int word_flag = 0; int word_num = 0; int line_num = 0; - int i ; - - word_num -= word_flag; + int i = 0; + + head_tail_flag[0] = (i_data[0] != 0x20) && (i_data[0] != 0x0A); + word_num -= 1-head_tail_flag[0]; - for (i=0; i < length; i++) { - - //s->printf("[SPE%d]%c",id,i_data[i]); - - if ((i_data[i] != 0x20) && (i_data[i] != 0x0A)) { - //s->printf("文字 数 = %d\n", word_num + word_flag); + for (; i < length; i++) { + if (i_data[i] == 0x20) { + word_flag = 1; + } else if (i_data[i] == 0x0A) { + line_num += 1; + word_flag = 1; + } else { word_num += word_flag; word_flag = 0; - } else if (i_data[i] == 0x20) { - //printf("スペース\n"); - word_flag = 1; - } else if (i_data[i] == 0x0A) { - //printf("改行\n"); - line_num += 1; - word_flag = 1; } - } word_num += word_flag; + head_tail_flag[1] = (i_data[i-1] != 0x20) && (i_data[i-1] != 0x0A); - // printf("PPE word %d line %d\n",word_num,line_num); + // s->printf("SPE word %d line %d\n",word_num,line_num); o_data[0] = (unsigned long long)word_num; o_data[1] = (unsigned long long)line_num;