view regexParser/sequentialSearch.cc @ 231:d67649929e96

add grepWalk
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Tue, 19 Jan 2016 12:54:11 +0900
parents 2081b9d6a179
children 1a34e702776a
line wrap: on
line source

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/mman.h>

#include "sequentialSearch.h"

void state1(Buffer buff);

void stateSkip(Buffer buff) {
    buff.matchBegin = buff.buffptr;
    state1(buff);
}

void stateMatch(Buffer buff) {
    fwrite(buff.matchBegin,buff.buffptr-buff.matchBegin,1,stdout);
    puts("\n");
    stateSkip(buff);
}

st_mmap_t createSt_mmap(char* filename,int fd) {
    st_mmap_t st_mmap;
    int map = MAP_PRIVATE;
    struct stat sb;
    if ((fd=open(filename,O_RDONLY,0666))==0) {
        perror("");
        fprintf(stderr,"can't open %s\n",filename);
    }

    if (fstat(fd,&sb)) {
        perror("");
        fprintf(stderr,"can't fstat %s\n",filename);
    }
    st_mmap.size = sb.st_size;
    unsigned char *file_mmap = (unsigned char*)mmap(NULL,st_mmap.size,PROT_WRITE|PROT_READ,map,fd,(off_t)0);
    if (file_mmap == NULL) {
        perror("");
        fprintf(stderr,"cannot mmap %s\n",filename);
    }
    st_mmap.file_mmap = file_mmap;
    return st_mmap;
}

Buffer createBuffer(st_mmap_t st_mmap) {
    Buffer buff;
    buff.buff = buff.buffptr = buff.matchBegin = st_mmap.file_mmap;
    buff.buffend = buff.buff + st_mmap.size;
    return buff;
}

#include "state.cc"
int main(int argc, char **argv) {
    char *filename;
    for (int i = 1; i < argc; i++) {
        if (strcmp(argv[i],"-file") == 0) {
            filename = argv[i+1]; i++;
        }
    }

    int fd;
    st_mmap_t st_mmap = createSt_mmap(filename,fd);
    Buffer buff = createBuffer(st_mmap);
    stateSkip(buff);
    close(fd);
    return 0;
}