changeset 42:cdb4fd81c31f

add regex mode
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Mon, 02 Mar 2015 23:59:24 +0900
parents e1c5ecbf8836
children ead0a307449e
files regex/main.cc
diffstat 1 files changed, 30 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- 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;
 }