Commit 879b2db4e70b05736a25287288d8c5ecf2c6d6ab
1 parent
a8eb6794
Construct QList of TemplatePair futures to maintain metadata file order
Showing
1 changed file
with
21 additions
and
11 deletions
openbr/janus_io.cpp
| @@ -37,29 +37,39 @@ janus_error janus_create_gallery(const char *data_path, janus_metadata metadata, | @@ -37,29 +37,39 @@ janus_error janus_create_gallery(const char *data_path, janus_metadata metadata, | ||
| 37 | return JANUS_SUCCESS; | 37 | return JANUS_SUCCESS; |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | +typedef QPair<janus_template_id, FlatTemplate> TemplatePair; | ||
| 41 | + | ||
| 42 | +TemplatePair _janus_create_flat_template(const char *data_path, TemplateData templateData, bool verbose) | ||
| 43 | +{ | ||
| 44 | + janus_template template_; | ||
| 45 | + janus_template_id templateID; | ||
| 46 | + JANUS_ASSERT(TemplateIterator::create(data_path, templateData, &template_, &templateID, verbose)) | ||
| 47 | + return TemplatePair(templateID, FlatTemplate(template_)); | ||
| 48 | +} | ||
| 49 | + | ||
| 40 | janus_error janus_create_templates(const char *data_path, janus_metadata metadata, const char *gallery_file, int verbose) | 50 | janus_error janus_create_templates(const char *data_path, janus_metadata metadata, const char *gallery_file, int verbose) |
| 41 | { | 51 | { |
| 42 | TemplateIterator ti(metadata, true); | 52 | TemplateIterator ti(metadata, true); |
| 43 | TemplateData templateData = ti.next(); | 53 | TemplateData templateData = ti.next(); |
| 44 | - unsigned int num_templates = 1; | ||
| 45 | 54 | ||
| 46 | - janus_gallery gallery; | ||
| 47 | - JANUS_ASSERT(janus_allocate_gallery(&gallery)) | ||
| 48 | - QFutureSynchronizer<void> futures; | 55 | + QFutureSynchronizer<TemplatePair> futures; |
| 49 | while (!templateData.templateIDs.empty()) { | 56 | while (!templateData.templateIDs.empty()) { |
| 50 | - futures.addFuture(QtConcurrent::run(_janus_create_template, data_path, templateData, gallery, verbose)); | 57 | + futures.addFuture(QtConcurrent::run(_janus_create_flat_template, data_path, templateData, verbose)); |
| 51 | templateData = ti.next(); | 58 | templateData = ti.next(); |
| 52 | - num_templates++; | ||
| 53 | } | 59 | } |
| 54 | futures.waitForFinished(); | 60 | futures.waitForFinished(); |
| 55 | - janus_flat_gallery flat_gallery = new janus_data[num_templates*janus_max_template_size()]; | ||
| 56 | - size_t bytes; | ||
| 57 | - JANUS_ASSERT(janus_flatten_gallery(gallery, flat_gallery, &bytes)) | 61 | + QList< QFuture<TemplatePair> > flat_templates = futures.futures(); |
| 58 | 62 | ||
| 59 | std::ofstream file; | 63 | std::ofstream file; |
| 60 | file.open(gallery_file, std::ios::out | std::ios::binary); | 64 | file.open(gallery_file, std::ios::out | std::ios::binary); |
| 61 | - file.write((char*)flat_gallery, bytes); | 65 | + foreach (const QFuture<TemplatePair> &future, flat_templates) { |
| 66 | + janus_template_id templateID = future.result().first; | ||
| 67 | + FlatTemplate flatTemplate = future.result().second; | ||
| 68 | + file.write((char*)&templateID, sizeof(templateID)); | ||
| 69 | + file.write((char*)&flatTemplate.data->bytes, sizeof(flatTemplate.data->bytes)); | ||
| 70 | + file.write((char*)flatTemplate.data->flat_template, flatTemplate.data->bytes); | ||
| 71 | + } | ||
| 72 | + | ||
| 62 | file.close(); | 73 | file.close(); |
| 63 | - delete[] flat_gallery; | ||
| 64 | return JANUS_SUCCESS; | 74 | return JANUS_SUCCESS; |
| 65 | } | 75 | } |