# HG changeset patch # User Masataka Kohagura # Date 1425308364 -32400 # Node ID cdb4fd81c31f393d016bbfc488656af2159e08e1 # Parent e1c5ecbf8836196269efb1e29edb374f5ff6712a add regex mode diff -r e1c5ecbf8836 -r cdb4fd81c31f regex/main.cc --- a/regex/main.cc Mon Mar 02 23:35:10 2015 +0900 +++ b/regex/main.cc Mon Mar 02 23:59:24 2015 +0900 @@ -10,6 +10,7 @@ #include "regex.h" const char *usr_help_str = "Usage: ./regex [-file filename] [-sw SearchWord]\n"; +const char *usr_help_mode = "Please add -bm or -regex"; extern int *createBMskiptable(BMDataPtr); extern void *BMmethod(BMDataPtr,ResultPtr); @@ -17,6 +18,8 @@ char *filename = 0; char *searchWord = 0; + bool bmSearchFlag = false; + bool regexFlag = false; // check argument for (int i = 0; argv[i]; i++) { @@ -24,6 +27,10 @@ filename = (char*)argv[i+1]; i++; }else if (strcmp(argv[i], "-sw") == 0) { searchWord = (char*)argv[i+1]; i++; + }else if (strcmp(argv[i], "-bm") == 0) { + bmSearchFlag = true; + }else if (strcmp(argv[i], "-regex") == 0) { + regexFlag = true; } } @@ -45,34 +52,41 @@ fprintf(stderr,"can't fstat %s\n",filename); } - BMDataPtr bmdata = (BMDataPtr)malloc(sizeof(BMData)); - textfile = (char*)malloc(sb.st_size); read(fd,textfile,sb.st_size); - bmdata->readText = textfile; - bmdata->readTextLen = sb.st_size; - bmdata->skipTable = (int*)malloc(sizeof(int)*256); - if (textfile == (char*)-1) { fprintf(stderr,"Can't mmap file\n"); perror(NULL); exit(0); } - // prepare Boyer Moore Search - bmdata->searchWord = searchWord; - bmdata->searchWordLen = strlen((const char*)bmdata->searchWord); - bmdata->skipTable = createBMskiptable(bmdata); + if (bmSearchFlag == true) { + BMDataPtr bmdata = (BMDataPtr)malloc(sizeof(BMData)); + ResultPtr result = (ResultPtr)malloc(sizeof(Result)); - ResultPtr result = (ResultPtr)malloc(sizeof(Result)); + bmdata->readText = textfile; + bmdata->readTextLen = sb.st_size; + bmdata->skipTable = (int*)malloc(sizeof(int)*256); + + // prepare Boyer Moore Search + bmdata->searchWord = searchWord; + bmdata->searchWordLen = strlen((const char*)bmdata->searchWord); + bmdata->skipTable = createBMskiptable(bmdata); - BMmethod(bmdata,result); + BMmethod(bmdata,result); + + printf("sword: %s len: %d\n",bmdata->searchWord,bmdata->searchWordLen); + printf("Match : %d\n",result->matchNum); - printf("sword: %s len: %d\n",bmdata->searchWord,bmdata->searchWordLen); - printf("Match : %d\n",result->matchNum); + free(result); + free(bmdata); + }else if (regexFlag == true) { - free(result); - free(bmdata); + }else{ + puts(usr_help_mode); + exit(1); + } + return 0; }