diff options
author | John Hawthorn <john.hawthorn@gmail.com> | 2017-01-08 00:55:11 -0800 |
---|---|---|
committer | John Hawthorn <john.hawthorn@gmail.com> | 2017-01-08 00:55:11 -0800 |
commit | 47dee6d7b8c66eead65e1f771bdaa2b924e305a8 (patch) | |
tree | ed955cdd32ab51a6fefe9f57a04cda9572111181 /src/choices.c | |
parent | 00123bfd597289042ea8d07e192d447344f28fc0 (diff) |
Create search_job struct
Diffstat (limited to 'src/choices.c')
-rw-r--r-- | src/choices.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/choices.c b/src/choices.c index ece3443..eb19bed 100644 --- a/src/choices.c +++ b/src/choices.c @@ -138,10 +138,14 @@ size_t choices_available(choices_t *c) { return c->available; } +struct search_job { + const char *search; +}; + struct worker { pthread_t thread_id; choices_t *choices; - const char *search; + struct search_job *job; size_t worker_num; struct scored_result *results; size_t available; @@ -149,15 +153,16 @@ struct worker { static void *choices_search_worker(void *data) { struct worker *w = (struct worker *)data; + struct search_job *job = w->job; const choices_t *c = w->choices; size_t start = (w->worker_num) * c->size / c->worker_count; size_t end = (w->worker_num + 1) * c->size / c->worker_count; for(size_t i = start; i < end; i++) { - if (has_match(w->search, c->strings[i])) { + if (has_match(job->search, c->strings[i])) { w->results[w->available].str = c->strings[i]; - w->results[w->available].score = match(w->search, c->strings[i]); + w->results[w->available].score = match(job->search, c->strings[i]); w->available++; } } @@ -168,6 +173,9 @@ static void *choices_search_worker(void *data) { void choices_search(choices_t *c, const char *search) { choices_reset_search(c); + struct search_job *job = calloc(1, sizeof(struct search_job)); + job->search = search; + /* allocate storage for our results */ c->results = malloc(c->size * sizeof(struct scored_result)); if (!c->results) { @@ -178,7 +186,7 @@ void choices_search(choices_t *c, const char *search) { struct worker *workers = calloc(c->worker_count, sizeof(struct worker)); for (unsigned int i = 0; i < c->worker_count; i++) { workers[i].choices = c; - workers[i].search = search; + workers[i].job = job; workers[i].worker_num = i; workers[i].results = malloc(c->size * sizeof(struct scored_result)); /* FIXME: This is overkill */ if (pthread_create(&workers[i].thread_id, NULL, &choices_search_worker, &workers[i])) { |