view example/regex_mas/ppe/Exec.cc @ 1604:e6855e99bdde draft

create line_print method in regex_mas
author Masa <e085726@ie.u-ryukyu.ac.jp>
date Thu, 11 Apr 2013 23:05:04 +0900
parents 44ff9443cc1c
children da6835e6d306
line wrap: on
line source

#include <stdio.h>
#include <string.h>
#include "Exec.h"
#include "Func.h"
void line_print(int,int,char*);
#define BUFFER_SIZE 4096

/* これは必須 */
SchedDefineTask(Exec);

static int
run(SchedTask *s, void *rbuf, void *wbuf)
{
    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_num = 0;
    int line_num = 1;
    int i = 0;
    bool word_head_a_flag = false; 
    bool a_flag = 0;
    bool match_flag = 0;
    char line_data[BUFFER_SIZE];
    int line_length = 0;
    //head_tail_flag[0] = (i_data[0] != 0x20) && (i_data[0] != 0x0A);
    
    for (; i < length; i++) {
        if (i_data[i] == 0x0A) {
	  
            if (match_flag == true) {
                line_print(line_num,line_length,line_data);
/*                printf("%d : ",line_num);
                for (int k = 0; k < line_length; k++) {
                    printf("%c",line_data[k]);
                }
                printf("\n");
*/
            }
            match_flag = false;
            line_length = 0;
            line_num++;
        } else {
            line_data[line_length] = i_data[i];
            line_length++;
              if (i_data[i] == 0x61) {
                  a_flag = true;
              }else if ((i_data[i] == 0x62) && (a_flag == true)) {
                  match_flag = true;
              }else if (i_data[i] == 0x20) {
                  a_flag = false;
              }
        }
    }
   
    //head_tail_flag[1] = (i_data[i-1] != 0x20) && (i_data[i-1] != 0x0A);
    head_tail_flag[1] = (word_head_a_flag == true);


    o_data[0] = (unsigned long long)word_num;
    o_data[1] = (unsigned long long)line_num;

    return 0;
}

void line_print(int _line_num,int _line_length,char *input_data){

    printf("%d : ",_line_num);
    for (int k = 0; k < _line_length; k++) {
        printf("%c",input_data[k]);
    }
    printf("\n");
}