Mercurial > hg > Game > Cerium
view example/bm_search/main.cc @ 2064:f786ffb2a198 draft
add bm.h
author | Nozomi |
---|---|
date | Wed, 17 Feb 2016 17:37:06 +0900 |
parents | 455e620ad2b2 |
children | 53643db3f0f9 |
line wrap: on
line source
#include <stdio.h> #include <string.h> #include <sys/time.h> #include "TaskManager.h" #include "SchedTask.h" #include "Func.h" #include "FileMapReduce.h" #include "bm.h" /* ;TODO * PS3でCPU数が2以上の時に、あまりが計算されてない */ extern void task_init(); void TMend(TaskManager *); static double st_time; static double ed_time; const char* usr_help_str = ""; static double getTime() { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec + (double)tv.tv_usec*1e-6; } //Boyer Moore法に使用するテーブルを作成 static void create_BMskiptable(BMPtr bm) { for (int i = 0; i < 256; ++i) { bm->skip_table[i] = bm->search_word_len; } for (int j = 0; j < bm->search_word_len - 1; ++j) { bm->skip_table[bm->search_word[j]] = bm->search_word_len - j - 1; } } int TMmain(TaskManager *manager, int argc, char *argv[]) { char *filename = 0; FileMapReduce *fmp = new FileMapReduce(manager,TASK_EXEC,TASK_EXEC_DATA_PARALLEL,TASK_PRINT); filename = fmp->init(argc, argv); BMPtr bm = new BM; bm->search_word = NULL; bm->next = NULL; bm->skip_table = (int*)malloc(sizeof(int)*256); BM dummy; dummy.next = NULL; BMPtr *b = &dummy.next; for (int i = 1; i < argc; i++) { if (strcmp(argv[i],"-sw") == 0) { BMPtr bm = *b = new BM; bm->search_word = (unsigned char*)argv[i+1]; i++; bm->search_word_len = strlen((const char*)bm->search_word); create_BMskiptable(bm); bm->next = NULL; b = &bm->next; } } BMPtr bmp = dummy.next; if (filename < 0 || bmp == NULL) { return -1; } fmp->w->global = (void*)bmp; fmp->division_out_size = sizeof(unsigned long long); task_init(); st_time = getTime(); fmp->run_start(manager, filename); manager->set_TMend(TMend); return 0; } void TMend(TaskManager *manager) { ed_time = getTime(); printf("Time: %0.6f\n",ed_time-st_time); } /* end */