annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #include <stdio.h>
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #include <string.h>
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 #include <unistd.h>
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 #include <fcntl.h>
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 #include <sys/stat.h>
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 #include <sys/mman.h>
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
231
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
8 #include "sequentialSearch.h"
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
230
2081b9d6a179 change var name BufferList to Buffer.
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 227
diff changeset
10 void state1(Buffer buff);
227
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
11
230
2081b9d6a179 change var name BufferList to Buffer.
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 227
diff changeset
12 void stateSkip(Buffer buff) {
227
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
13 buff.matchBegin = buff.buffptr;
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
14 state1(buff);
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
15 }
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
16
230
2081b9d6a179 change var name BufferList to Buffer.
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 227
diff changeset
17 void stateMatch(Buffer buff) {
227
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
18 fwrite(buff.matchBegin,buff.buffptr-buff.matchBegin,1,stdout);
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
19 puts("\n");
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
20 stateSkip(buff);
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
21 }
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
22
231
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
23 st_mmap_t createSt_mmap(char* filename,int fd) {
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
24 st_mmap_t st_mmap;
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 int map = MAP_PRIVATE;
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 struct stat sb;
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 if ((fd=open(filename,O_RDONLY,0666))==0) {
227
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
28 perror("");
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 fprintf(stderr,"can't open %s\n",filename);
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 }
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 if (fstat(fd,&sb)) {
227
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
33 perror("");
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 fprintf(stderr,"can't fstat %s\n",filename);
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 }
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 st_mmap.size = sb.st_size;
227
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
37 unsigned char *file_mmap = (unsigned char*)mmap(NULL,st_mmap.size,PROT_WRITE|PROT_READ,map,fd,(off_t)0);
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
38 if (file_mmap == NULL) {
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
39 perror("");
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
40 fprintf(stderr,"cannot mmap %s\n",filename);
8be58af605da fix getNext()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 226
diff changeset
41 }
231
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
42 st_mmap.file_mmap = file_mmap;
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
43 return st_mmap;
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
44 }
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
231
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
46 Buffer createBuffer(st_mmap_t st_mmap) {
230
2081b9d6a179 change var name BufferList to Buffer.
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 227
diff changeset
47 Buffer buff;
231
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
48 buff.buff = buff.buffptr = buff.matchBegin = st_mmap.file_mmap;
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 buff.buffend = buff.buff + st_mmap.size;
231
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
50 return buff;
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
51 }
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
52
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
53 #include "state.cc"
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
54 int main(int argc, char **argv) {
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
55 char *filename;
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
56 for (int i = 1; i < argc; i++) {
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
57 if (strcmp(argv[i],"-file") == 0) {
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
58 filename = argv[i+1]; i++;
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
59 }
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
60 }
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
61
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
62 int fd;
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
63 st_mmap_t st_mmap = createSt_mmap(filename,fd);
d67649929e96 add grepWalk
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
64 Buffer buff = createBuffer(st_mmap);
226
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 stateSkip(buff);
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 close(fd);
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 return 0;
b4022ba23de5 add sequentialSearch
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 }