]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
seq_range_array_add() API changed. Added other functions to provide the less common...
authorTimo Sirainen <tss@iki.fi>
Sun, 24 Jun 2012 18:14:56 +0000 (21:14 +0300)
committerTimo Sirainen <tss@iki.fi>
Sun, 24 Jun 2012 18:14:56 +0000 (21:14 +0300)
33 files changed:
src/doveadm/dsync/dsync-mailbox-export.c
src/doveadm/dsync/dsync-mailbox-import.c
src/imap/cmd-store.c
src/imap/imap-search.c
src/lib-index/mail-index-sync-update.c
src/lib-index/mail-index-transaction-finish.c
src/lib-index/mail-index-transaction-sort-appends.c
src/lib-index/mail-index-transaction-update.c
src/lib-index/mail-index-view-sync.c
src/lib-storage/index/dbox-multi/mdbox-map.c
src/lib-storage/index/dbox-multi/mdbox-purge.c
src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c
src/lib-storage/index/dbox-multi/mdbox-sync.c
src/lib-storage/index/imapc/imapc-save.c
src/lib-storage/index/index-search.c
src/lib-storage/index/index-sync-search.c
src/lib-storage/index/index-sync.c
src/lib-storage/mail-search.c
src/lib-storage/mailbox-get.c
src/lib-storage/mailbox-search-result.c
src/lib/seq-range-array.c
src/lib/seq-range-array.h
src/lib/test-seq-range-array.c
src/plugins/fts-lucene/lucene-wrapper.cc
src/plugins/fts-solr/solr-connection.c
src/plugins/fts-squat/squat-trie.c
src/plugins/fts-squat/squat-uidlist.c
src/plugins/fts/fts-api.c
src/plugins/fts/fts-expunge-log.c
src/plugins/fts/fts-search.c
src/plugins/virtual/virtual-search.c
src/plugins/virtual/virtual-storage.c
src/plugins/virtual/virtual-sync.c

index 70a557e487d3d4af98e388d9588816194ed890b7..34ad91cac8fac3181aa1cb2138d8415f282b3aa9 100644 (file)
@@ -212,7 +212,7 @@ export_add_mail_instance(struct dsync_mailbox_exporter *exporter,
 
        if (exporter->auto_export_mails && !exporter->mails_have_guids) {
                /* GUIDs not supported, mail is requested by UIDs */
-               seq_range_array_add(&exporter->requested_uids, 0, change->uid);
+               seq_range_array_add(&exporter->requested_uids, change->uid);
                return;
        }
        if (*change->guid == '\0') {
@@ -232,7 +232,7 @@ export_add_mail_instance(struct dsync_mailbox_exporter *exporter,
                if (exporter->auto_export_mails)
                        instances->requested = TRUE;
        }
-       seq_range_array_add(&instances->seqs, 0, seq);
+       seq_range_array_add(&instances->seqs, seq);
 }
 
 static int
@@ -273,7 +273,7 @@ dsync_mailbox_export_add_flagchange_uids(struct dsync_mailbox_exporter *exporter
                const struct dsync_mail_change *change = value;
 
                if (change->type == DSYNC_MAIL_CHANGE_TYPE_FLAG_CHANGE)
-                       seq_range_array_add(uids, 0, change->uid);
+                       seq_range_array_add(uids, change->uid);
        }
        hash_table_iterate_deinit(&iter);
 }
@@ -494,7 +494,7 @@ dsync_mailbox_export_body_search_init(struct dsync_mailbox_exporter *exporter)
                seq = uids[0].seq1;
                if (!instances->searched) {
                        instances->searched = TRUE;
-                       seq_range_array_add(&sarg->value.seqset, 0, seq);
+                       seq_range_array_add(&sarg->value.seqset, seq);
                } else if (seq_range_exists(&exporter->expunged_seqs, seq)) {
                        /* we're on a second round, refetching expunged
                           messages */
@@ -508,7 +508,7 @@ dsync_mailbox_export_body_search_init(struct dsync_mailbox_exporter *exporter)
                        }
                        uids = array_idx(&instances->seqs, 0);
                        seq = uids[0].seq1;
-                       seq_range_array_add(&sarg->value.seqset, 0, seq);
+                       seq_range_array_add(&sarg->value.seqset, seq);
                }
        }
        hash_table_iterate_deinit(&iter);
@@ -608,7 +608,7 @@ void dsync_mailbox_export_want_mail(struct dsync_mailbox_exporter *exporter,
 
        if (*request->guid == '\0') {
                i_assert(request->uid > 0);
-               seq_range_array_add(&exporter->requested_uids, 0, request->uid);
+               seq_range_array_add(&exporter->requested_uids, request->uid);
                return;
        }
 
@@ -648,7 +648,7 @@ dsync_mailbox_export_next_mail(struct dsync_mailbox_exporter *exporter)
                }
                /* the message was expunged. if the GUID has another instance,
                   try sending it later. */
-               seq_range_array_add(&exporter->expunged_seqs, 0, mail->seq);
+               seq_range_array_add(&exporter->expunged_seqs, mail->seq);
        }
        /* if some instances of messages were expunged, retry fetching them
           with other instances */
index c8c6f34d8abd0c70a307d6c632e6ca76d224ce00..cc6c48e97f1845eb2ffeb8a41726ee8fea8ffeff 100644 (file)
@@ -199,7 +199,7 @@ importer_next_mail(struct dsync_mailbox_importer *importer, uint32_t wanted_uid)
                        /* this message exists locally, but remote didn't send
                           expunge-change for it. if the message's
                           uid <= last-common-uid, it should be deleted */
-                       seq_range_array_add(&importer->maybe_expunge_uids, 0,
+                       seq_range_array_add(&importer->maybe_expunge_uids, 
                                            importer->cur_mail->uid);
                }
 
@@ -751,8 +751,7 @@ dsync_mailbox_import_expunge(struct dsync_mailbox_importer *importer,
                /* we don't know yet if we should expunge this
                   message or not. queue it until we do. */
                i_assert(change->uid > importer->last_common_uid);
-               seq_range_array_add(&importer->maybe_expunge_uids, 0,
-                                   change->uid);
+               seq_range_array_add(&importer->maybe_expunge_uids, change->uid);
        }
 }
 
index a35f328067448cd650dac0361381bba9914c97aa..6dc1df8470ffeb38b454b31d6f9641e657428515 100644 (file)
@@ -189,8 +189,7 @@ bool cmd_store(struct client_command_context *cmd)
                        /* check early so there's less work for transaction
                           commit if something has to be cancelled */
                        if (mail_get_modseq(mail) > ctx.max_modseq) {
-                               seq_range_array_add(&modified_set, 0,
-                                                   mail->seq);
+                               seq_range_array_add(&modified_set, mail->seq);
                                continue;
                        }
                }
index 7a086eb91c200b712fa82f549a8e48f33fd9767a..552219f51fe759a0897990d1eea3de6d195a8f63 100644 (file)
@@ -334,7 +334,7 @@ search_update_mail(struct imap_search_context *ctx, struct mail *mail)
        }
        if ((ctx->return_options & SEARCH_RETURN_SAVE) != 0) {
                seq_range_array_add(&ctx->cmd->client->search_saved_uidset,
-                                   0, mail->uid);
+                                   mail->uid);
        }
        if ((ctx->return_options & SEARCH_RETURN_RELEVANCY) != 0) {
                const char *str;
index 98075a3d0357916c951f185ea7fd1152e0fa8a27..d74e2a6b1495c0ab68d5df1c1b35b8ca06c8e850 100644 (file)
@@ -545,7 +545,7 @@ mail_index_sync_record_real(struct mail_index_sync_map_ctx *ctx,
                                        rec->uid);
                                break;
                        }
-                       seq_range_array_add(&uids, 0, rec->uid);
+                       seq_range_array_add(&uids, rec->uid);
                }
 
                /* do this in reverse so the memmove()s are smaller */
index 774ecf7d3be63f5ffc188f7793375199fce0a3e9..07cb77f2454a0d598250ace04777fce65265f020 100644 (file)
@@ -129,7 +129,7 @@ mail_index_transaction_finish_flag_updates(struct mail_index_transaction *t)
                        if ((rec->flags & u->add_flags) != u->add_flags ||
                            (rec->flags & u->remove_flags) != 0) {
                                /* keep this change */
-                               seq_range_array_add(&keeps, 0, seq);
+                               seq_range_array_add(&keeps, seq);
                        }
                }
                i = mail_transaction_drop_range(t, updates[i], i, &keeps);
@@ -163,7 +163,7 @@ mail_index_transaction_check_conflicts(struct mail_index_transaction *t)
                        ret1 = mail_index_cancel_flag_updates(t, seq);
                        ret2 = mail_index_cancel_keyword_updates(t, seq);
                        if (ret1 || ret2)
-                               seq_range_array_add(t->conflict_seqs, 0, seq);
+                               seq_range_array_add(t->conflict_seqs, seq);
                }
        }
        mail_index_transaction_set_log_updates(t);
index 755d347808c700e14f2e79ea9894ff5e549b1aa6..606850d2a40ae0675006766bf784c10de4a37ee1 100644 (file)
@@ -95,7 +95,7 @@ sort_appends_seq_range(ARRAY_TYPE(seq_range) *array, uint32_t first_new_seq,
                idx1 = range[i].seq1 - first_new_seq;
                idx2 = range[i].seq2 - first_new_seq;
                for (idx = idx1; idx <= idx2; idx++)
-                       seq_range_array_add(array, 0, old_to_newseq_map[idx]);
+                       seq_range_array_add(array, old_to_newseq_map[idx]);
        }
        array_free(&old_seqs);
 }
index a716c0c88900929c0734774e9b3c736118c5bbc8..9304ca9d804b5037ec576c83c2bbb607955d47bd 100644 (file)
@@ -1089,15 +1089,17 @@ void mail_index_update_keywords(struct mail_index_transaction *t, uint32_t seq,
                        seq_range_array_remove(&u->add_seq, seq);
                        /* Don't bother updating remove_seq for new messages,
                           since their initial state is "no keyword" anyway */
-                       if (seq < t->first_new_seq)
-                               seq_range_array_add(&u->remove_seq, 16, seq);
+                       if (seq < t->first_new_seq) {
+                               seq_range_array_add_with_init(&u->remove_seq,
+                                                             16, seq);
+                       }
                }
        }
        if (add_keywords != NULL) {
                for (i = 0; i < add_keywords->count; i++) {
                        u = array_idx_modifiable(&t->keyword_updates,
                                                 add_keywords->idx[i]);
-                       seq_range_array_add(&u->add_seq, 16, seq);
+                       seq_range_array_add_with_init(&u->add_seq, 16, seq);
                        seq_range_array_remove(&u->remove_seq, seq);
                }
        }
index a700f0f6fc0b9b347bb19b9cd6f4dc05fcbaf53e..f122150b8ef3d349a07a4da9c03baadbc7e791a4 100644 (file)
@@ -145,7 +145,7 @@ view_sync_add_expunge_guids(ARRAY_TYPE(seq_range) *dest,
 
        src_count = src_size / sizeof(*src);
        for (i = 0; i < src_count; i++)
-               seq_range_array_add(dest, 0, src[i].uid);
+               seq_range_array_add(dest, src[i].uid);
 }
 
 static int
@@ -394,7 +394,7 @@ static int view_sync_apply_lost_changes(struct mail_index_view_sync_ctx *ctx,
           be avoided by always keeping a private copy of the map in the view,
           but that's a waste of memory for as rare of a problem as this. */
        if (changed)
-               seq_range_array_add(&ctx->lost_flags, 0, new_rec->uid);
+               seq_range_array_add(&ctx->lost_flags, new_rec->uid);
        return 0;
 }
 
@@ -437,7 +437,7 @@ view_sync_get_log_lost_changes(struct mail_index_view_sync_ctx *ctx,
                        i++; j++;
                } else if (old_rec->uid < new_rec->uid) {
                        /* message expunged */
-                       seq_range_array_add(&ctx->expunges, 0, old_rec->uid);
+                       seq_range_array_add(&ctx->expunges, old_rec->uid);
                        i++;
                } else {
                        /* new message appeared out of nowhere */
@@ -451,7 +451,7 @@ view_sync_get_log_lost_changes(struct mail_index_view_sync_ctx *ctx,
        /* if there are old messages left, they're all expunged */
        for (; i < old_count; i++) {
                old_rec = MAIL_INDEX_MAP_IDX(old_map, i);
-               seq_range_array_add(&ctx->expunges, 0, old_rec->uid);
+               seq_range_array_add(&ctx->expunges, old_rec->uid);
        }
        /* if there are new messages left, they're all new messages */
        thdr.type = MAIL_TRANSACTION_APPEND | MAIL_TRANSACTION_EXTERNAL;
index 210faa0213866e3b0fe7c31b9c9c400b0d4fb60a..b90670d67a448252bd59ddf98aa3b2bf1b82e6cf 100644 (file)
@@ -444,7 +444,7 @@ int mdbox_map_get_zero_ref_files(struct mdbox_map *map,
                                      &data, &expunged);
                if (data != NULL && !expunged) {
                        rec = data;
-                       seq_range_array_add(file_ids_r, 0, rec->file_id);
+                       seq_range_array_add(file_ids_r, rec->file_id);
                }
        }
        return 0;
@@ -971,7 +971,7 @@ mdbox_map_find_primary_files(struct mdbox_map_append_context *ctx,
                                  &file_id) < 0)
                        continue;
 
-               seq_range_array_add(file_ids_r, 0, file_id);
+               seq_range_array_add(file_ids_r, file_id);
        }
        if (errno != 0) {
                mail_storage_set_critical(storage,
@@ -1023,7 +1023,7 @@ mdbox_map_find_appendable_file(struct mdbox_map_append_context *ctx,
 
                if (seq_range_exists(&checked_file_ids, rec->file_id))
                        continue;
-               seq_range_array_add(&checked_file_ids, 0, rec->file_id);
+               seq_range_array_add(&checked_file_ids, rec->file_id);
 
                if (++backwards_lookup_count > MAX_BACKWARDS_LOOKUPS) {
                        /* we've wasted enough time here */
index 57e8e0e772edf73ec3de9f0ff6e1eede31eba383..594a9927406b45dd4db358fc6f77d85148301bb5 100644 (file)
@@ -369,7 +369,7 @@ mdbox_file_purge(struct mdbox_purge_context *ctx, struct dbox_file *file,
                                                         &ext_refs);
                        if (ret <= 0)
                                break;
-                       seq_range_array_add(&expunged_map_uids, 0,
+                       seq_range_array_add(&expunged_map_uids,
                                            msgs[i].map_uid);
                } else {
                        /* non-expunged message. write it to output file. */
@@ -534,7 +534,7 @@ static int mdbox_purge_get_primary_files(struct mdbox_purge_context *ctx)
 
                str_truncate(path, dir_len);
                str_append(path, d->d_name);
-               seq_range_array_add(&ctx->primary_file_ids, 0, file_id);
+               seq_range_array_add(&ctx->primary_file_ids, file_id);
        }
        if (array_count(&ctx->primary_file_ids) > 0) {
                const struct seq_range *range =
@@ -602,7 +602,7 @@ static int mdbox_altmove_add_files(struct mdbox_purge_context *ctx)
                        hash_table_insert(ctx->altmoves,
                                POINTER_CAST(cur_map_uid),
                                POINTER_CAST(MDBOX_MSG_ACTION_MOVE_TO_ALT));
-                       seq_range_array_add(&ctx->purge_file_ids, 0,
+                       seq_range_array_add(&ctx->purge_file_ids,
                                            cur_rec.file_id);
                }
        }
@@ -634,7 +634,7 @@ static int mdbox_altmove_add_files(struct mdbox_purge_context *ctx)
 
                hash_table_insert(ctx->altmoves, POINTER_CAST(cur_map_uid),
                                  POINTER_CAST(MDBOX_MSG_ACTION_MOVE_FROM_ALT));
-               seq_range_array_add(&ctx->purge_file_ids, 0, cur_rec.file_id);
+               seq_range_array_add(&ctx->purge_file_ids, cur_rec.file_id);
        }
        ctx->have_altmoves = hash_table_count(ctx->altmoves) > 0;
        return ret;
index 3dd34d87ce0e1cebec6911a4cafb6e110554b1a7..68104ab9ee1e31518aea41231d646f2c2840ec12 100644 (file)
@@ -262,7 +262,7 @@ static int rebuild_add_file(struct mdbox_storage_rebuild_context *ctx,
                if (rebuild_rename_file(ctx, dir, &fname, &file_id) < 0)
                        return -1;
        }
-       seq_range_array_add(&ctx->seen_file_ids, 0, file_id);
+       seq_range_array_add(&ctx->seen_file_ids, file_id);
 
        file = mdbox_file_init(ctx->storage, file_id);
        if ((ret = dbox_file_open(file, &deleted)) > 0 && !deleted)
index 1d6201979f7e8c437c44791f9dda9488c3f09877..2b3f4426f5433fff20092b8c296fa9d6999592ea 100644 (file)
@@ -52,7 +52,7 @@ static int mdbox_sync_expunge(struct mdbox_sync_context *ctx, uint32_t seq,
 {
        uint32_t map_uid;
 
-       if (seq_range_array_add(&ctx->expunged_seqs, 0, seq)) {
+       if (seq_range_array_try_add(&ctx->expunged_seqs, seq)) {
                /* already marked as expunged in this sync */
                return 0;
        }
index e3410d5aa033cab5061b8a9f7b3bab2d39eca8c8..3bbe7b3a2e40437e1c2b4f692ad74f42b394c1e5 100644 (file)
@@ -126,7 +126,7 @@ static void imapc_save_appenduid(struct imapc_save_context *ctx,
                return;
 
        if (str_to_uint32(args[1], &dest_uid) == 0) {
-               seq_range_array_add(&ctx->dest_saved_uids, 0, dest_uid);
+               seq_range_array_add(&ctx->dest_saved_uids, dest_uid);
                *uid_r = dest_uid;
        }
 }
@@ -342,7 +342,7 @@ static void imapc_save_copyuid(struct imapc_save_context *ctx,
                return;
 
        if (str_to_uint32(args[2], &dest_uid) == 0) {
-               seq_range_array_add(&ctx->dest_saved_uids, 0, dest_uid);
+               seq_range_array_add(&ctx->dest_saved_uids, dest_uid);
                *uid_r = dest_uid;
        }
 }
index bbd3b1f1e510abcdaa728f80ba395da8c9fdfb96..3d1fb0b014ee45c286e1fdb558978476ffc1f8b5 100644 (file)
@@ -717,7 +717,7 @@ search_msgset_fix_limits(unsigned int messages_count,
                if (range[count-1].seq2 == (uint32_t)-1) {
                        /* "*" used, make sure the last message is in the range
                           (e.g. with count+1:* we still want to include it) */
-                       seq_range_array_add(seqset, 0, messages_count);
+                       seq_range_array_add(seqset, messages_count);
                }
                /* remove all nonexistent messages */
                seq_range_array_remove_range(seqset, messages_count + 1,
@@ -969,7 +969,7 @@ static int search_build_subthread(struct mail_thread_iterate_context *iter,
                        if (search_build_subthread(child_iter, uids) < 0)
                                ret = -1;
                }
-               seq_range_array_add(uids, 0, node->uid);
+               seq_range_array_add(uids, node->uid);
        }
        if (mail_thread_iterate_deinit(&iter) < 0)
                ret = -1;
@@ -1010,7 +1010,7 @@ static int search_build_inthread_result(struct index_search_context *ctx,
        iter = mail_thread_iterate_init(ctx->thread_ctx,
                                        arg->value.thread_type, FALSE);
        while ((node = mail_thread_iterate_next(iter, &child_iter)) != NULL) {
-               seq_range_array_add(&thread_uids, 0, node->uid);
+               seq_range_array_add(&thread_uids, node->uid);
                if (child_iter != NULL) {
                        if (search_build_subthread(child_iter,
                                                   &thread_uids) < 0)
index ae79ca692ac27d831aec1c25c4a4624a9128ddd2..c1ff277935d6346881c0ed84f338c5d3508a6abf 100644 (file)
@@ -28,7 +28,7 @@ static void index_sync_uidify_array(struct index_mailbox_sync_context *ctx,
        array_foreach(changes, range) {
                for (seq = range->seq1; seq <= range->seq2; seq++) {
                        mail_index_lookup_uid(ctx->ctx.box->view, seq, &uid);
-                       seq_range_array_add(&ctx->all_flag_update_uids, 0, uid);
+                       seq_range_array_add(&ctx->all_flag_update_uids, uid);
                }
        }
 }
index 4422fd393761f8f5c52b1c5885cdf9bf969109d1..f97959dece5ab9c5478c8159041c7441ec621b78 100644 (file)
@@ -53,7 +53,7 @@ void index_mailbox_set_recent_uid(struct mailbox *box, uint32_t uid)
        }
        ibox->recent_flags_prev_uid = uid;
 
-       seq_range_array_add(&ibox->recent_flags, 64, uid);
+       seq_range_array_add_with_init(&ibox->recent_flags, 64, uid);
        ibox->recent_flags_count++;
 }
 
index 5b71ab8a4fbdb537c4fd454eab7894dc8d272791..ec0b2a6b09e5f665fbf02df9439eeabfd1b1d904 100644 (file)
@@ -57,7 +57,7 @@ mailbox_uidset_change(struct mail_search_arg *arg, struct mailbox *box,
                        /* make sure the last message is in the range */
                        mailbox_get_seq_range(box, 1, (uint32_t)-1,
                                              &seq1, &seq2);
-                       seq_range_array_add(&arg->value.seqset, 0, seq2);
+                       seq_range_array_add(&arg->value.seqset, seq2);
                }
        }
 }
index a77cdb9b56523804bd3b2b29907cda4c06e427af..27cce0ad8e066352286ea9ea4f0459476c9514be 100644 (file)
@@ -29,7 +29,7 @@ void mailbox_get_uid_range(struct mailbox *box,
                }
                for (seq = range[i].seq1; seq <= range[i].seq2; seq++) {
                        mail_index_lookup_uid(box->view, seq, &uid);
-                       seq_range_array_add(uids, 0, uid);
+                       seq_range_array_add(uids, uid);
                }
        }
 }
@@ -59,7 +59,7 @@ add_guid_expunges(ARRAY_TYPE(seq_range) *expunged_uids, uint32_t min_uid,
        end = src + src_size / sizeof(*src);
        for (; src != end; src++) {
                if (src->uid >= min_uid)
-                       seq_range_array_add(expunged_uids, 0, src->uid);
+                       seq_range_array_add(expunged_uids, src->uid);
        }
 }
 
index 9930285a4a788d20105dc4afb3d7cabac9129d89..6c63f22d50f4b585be16a0e36d3b5ac30273d3d5 100644 (file)
@@ -121,9 +121,9 @@ void mailbox_search_result_add(struct mail_search_result *result, uint32_t uid)
        if (seq_range_exists(&result->uids, uid))
                return;
 
-       seq_range_array_add(&result->uids, 0, uid);
+       seq_range_array_add(&result->uids, uid);
        if (array_is_created(&result->added_uids)) {
-               seq_range_array_add(&result->added_uids, 0, uid);
+               seq_range_array_add(&result->added_uids, uid);
                seq_range_array_remove(&result->removed_uids, uid);
        }
 }
@@ -133,7 +133,7 @@ void mailbox_search_result_remove(struct mail_search_result *result,
 {
        if (seq_range_array_remove(&result->uids, uid)) {
                if (array_is_created(&result->removed_uids)) {
-                       seq_range_array_add(&result->removed_uids, 0, uid);
+                       seq_range_array_add(&result->removed_uids, uid);
                        seq_range_array_remove(&result->added_uids, uid);
                }
        }
@@ -162,7 +162,7 @@ void mailbox_search_results_remove(struct mailbox *box, uint32_t uid)
 void mailbox_search_result_never(struct mail_search_result *result,
                                 uint32_t uid)
 {
-       seq_range_array_add(&result->never_uids, 0, uid);
+       seq_range_array_add(&result->never_uids, uid);
 }
 
 void mailbox_search_results_never(struct mail_search_context *ctx,
index e2ad7a07f2a0c1b87598eb78668162eb3d88aa2a..a63abb2181fd29fb77d6ad3bd8bdb4ac1a252a03 100644 (file)
@@ -33,17 +33,13 @@ static bool seq_range_lookup(const ARRAY_TYPE(seq_range) *array,
        return FALSE;
 }
 
-bool seq_range_array_add(ARRAY_TYPE(seq_range) *array,
-                        unsigned int init_count, uint32_t seq)
+bool seq_range_array_try_add(ARRAY_TYPE(seq_range) *array, uint32_t seq)
 {
        struct seq_range *data, value;
        unsigned int idx, count;
 
        value.seq1 = value.seq2 = seq;
 
-       if (!array_is_created(array))
-               i_array_init(array, init_count);
-
        data = array_get_modifiable(array, &count);
        if (count == 0) {
                array_append(array, &value, 1);
@@ -104,6 +100,19 @@ bool seq_range_array_add(ARRAY_TYPE(seq_range) *array,
        return FALSE;
 }
 
+void seq_range_array_add(ARRAY_TYPE(seq_range) *array, uint32_t seq)
+{
+       (void)seq_range_array_try_add(array, seq);
+}
+
+void seq_range_array_add_with_init(ARRAY_TYPE(seq_range) *array,
+                                  unsigned int init_count, uint32_t seq)
+{
+       if (!array_is_created(array))
+               i_array_init(array, init_count);
+       (void)seq_range_array_try_add(array, seq);
+}
+
 void seq_range_array_add_range(ARRAY_TYPE(seq_range) *array,
                               uint32_t seq1, uint32_t seq2)
 {
index dae029279f0a734ea0b6eadb17dcc682f86fb26b..f06272484a7a198709debdaf98a8e06f9d1c37ff 100644 (file)
@@ -12,9 +12,15 @@ struct seq_range_iter {
 };
 
 /* Add sequrence to range. If the array isn't created yet, create it with
-   initial size of init_count. Returns TRUE if seq was already in the array. */
-bool seq_range_array_add(ARRAY_TYPE(seq_range) *array, unsigned int init_count,
-                        uint32_t seq);
+   initial size of init_count. */
+void seq_range_array_add(ARRAY_TYPE(seq_range) *array, uint32_t seq);
+/* Like seq_range_array_add(), but reutrn TRUE if seq was already in the
+   array. */
+bool seq_range_array_try_add(ARRAY_TYPE(seq_range) *array, uint32_t seq);
+/* Like seq_range_array_add(), but if the array isn't already initialized do
+   it with i_array_init(). */
+void seq_range_array_add_with_init(ARRAY_TYPE(seq_range) *array,
+                                  unsigned int init_count, uint32_t seq);
 void seq_range_array_add_range(ARRAY_TYPE(seq_range) *array,
                               uint32_t seq1, uint32_t seq2);
 void seq_range_array_merge(ARRAY_TYPE(seq_range) *dest,
index 90bd11d5ed954c9e8bf39c0703016566f95deee9..76288efb9cfc09d8330ad3e057a39ef3911e0fa2 100644 (file)
@@ -12,9 +12,9 @@ static void test_seq_range_array_add_merge(void)
 
        test_begin("seq_range_array_add() merging");
        t_array_init(&range, 8);
-       seq_range_array_add(&range, 0, 4);
-       seq_range_array_add(&range, 0, 1);
-       seq_range_array_add(&range, 0, 2);
+       seq_range_array_add(&range, 4);
+       seq_range_array_add(&range, 1);
+       seq_range_array_add(&range, 2);
        test_assert(array_count(&range) == 2);
        test_end();
 }
@@ -39,7 +39,7 @@ static void test_seq_range_array_random(void)
                test = rand() % 4;
                switch (test) {
                case 0:
-                       seq_range_array_add(&range, 0, seq1);
+                       seq_range_array_add(&range, seq1);
                        shadowbuf[seq1] = 1;
                        break;
                case 1:
@@ -112,7 +112,7 @@ static void test_seq_range_array_invert(void)
                success = TRUE;
                start = i;
                for (; input[i] != -1U; i++) {
-                       seq_range_array_add(&range, 32, input[i]);
+                       seq_range_array_add_with_init(&range, 32, input[i]);
                        for (j = start; j < i; j++) {
                                if (!seq_range_exists(&range, input[j]))
                                        success = FALSE;
@@ -142,7 +142,7 @@ static void test_seq_range_create(ARRAY_TYPE(seq_range) *array, uint8_t byte)
        array_clear(array);
        for (i = 0; i < 8; i++) {
                if ((byte & (1 << i)) != 0)
-                       seq_range_array_add(array, 0, i + 1);
+                       seq_range_array_add(array, i + 1);
        }
 }
 
index 469edec14b5bb7905274481e9693500fdf85a683..2ffb0eb5253f2c2cb7c654f31bca0ad62cfbbce1 100644 (file)
@@ -1237,7 +1237,7 @@ lucene_index_search(struct lucene_index *index,
                                score->uid = uid;
                                score->score = hits->score(i);
                        }
-                       seq_range_array_add(uids_r, 0, uid);
+                       seq_range_array_add(uids_r, uid);
                }
                _CLDELETE(hits);
                return ret;
@@ -1346,7 +1346,7 @@ lucene_index_search_multi(struct lucene_index *index, struct hash_table *guids,
                                p_array_init(&br->definite_uids, result->pool, 32);
                                p_array_init(&br->scores, result->pool, 32);
                        }
-                       seq_range_array_add(&br->definite_uids, 0, uid);
+                       seq_range_array_add(&br->definite_uids, uid);
                        score = array_append_space(&br->scores);
                        score->uid = uid;
                        score->score = hits->score(i);
index 8eddea9410216b88974a1b1987f7e8255b679f10..66c96840360eabeca866d682e74f1328f4288e61 100644 (file)
@@ -317,7 +317,7 @@ static void solr_lookup_add_doc(struct solr_lookup_xml_context *ctx)
        }
        result = solr_result_get(ctx, box_id);
 
-       seq_range_array_add(&result->uids, 0, ctx->uid);
+       seq_range_array_add(&result->uids, ctx->uid);
        if (ctx->score != 0) {
                score = array_append_space(&result->scores);
                score->uid = ctx->uid;
index f84b801473ff3a3f59f1f26fc67a20d00d3cc738..87b1f1a8f78000aa448262b7dedbb3e8c542a50b 100644 (file)
@@ -1884,7 +1884,7 @@ squat_trie_filter_type(enum squat_index_type type,
        for (i = 0; i < count; i++) {
                for (uid = src_range[i].seq1; uid <= src_range[i].seq2; uid++) {
                        if ((uid & 1) == mask)
-                               seq_range_array_add(dest, 0, uid/2);
+                               seq_range_array_add(dest, uid/2);
                }
        }
 }
index 2ae141a5391c9190ea8226a4982d9212ef9d3dec..00a3594bd02088afdac26809b666765124100703 100644 (file)
@@ -1594,7 +1594,7 @@ int squat_uidlist_filter(struct squat_uidlist *uidlist, uint32_t uid_list_idx,
                                ret = -1;
                                break;
                        }
-                       seq_range_array_add(&dest_uids, 0, parent_uid);
+                       seq_range_array_add(&dest_uids, parent_uid);
                        for (; parent_idx < parent_count; parent_idx++) {
                                if (parent_range[parent_idx].seq2 <= parent_uid)
                                        continue;
index 24031a6988c4a462b0eb2f9e795ecccf834773c1..2109f62b4dc576669c239ea3a3d44880bc7b4a28 100644 (file)
@@ -235,7 +235,7 @@ fts_merge_maybies(ARRAY_TYPE(seq_range) *dest_maybe,
        for (i = 0; i < count; i++) {
                for (seq = range[i].seq1; seq <= range[i].seq2; seq++) {
                        if (seq_range_exists(src_maybe, seq))
-                               seq_range_array_add(dest_maybe, 0, seq);
+                               seq_range_array_add(dest_maybe, seq);
                }
        }
 }
index f735f6c6dab83336af91e377d556016d423ce504..ecc9d0dfd624813a0de6e173a180a5c629bc8f80 100644 (file)
@@ -214,7 +214,7 @@ void fts_expunge_log_append_next(struct fts_expunge_log_append_ctx *ctx,
                        mailbox = fts_expunge_log_mailbox_alloc(ctx, mailbox_guid);
                ctx->prev_mailbox = mailbox;
        }
-       if (!seq_range_array_add(&mailbox->uids, 0, uid))
+       if (!seq_range_array_try_add(&mailbox->uids, uid))
                mailbox->uids_count++;
 }
 
index 3e04a5bb375370e72ffd657da6fa647141df39ae..2b5eebe8aa614bfa69e66396a67ff10424317463 100644 (file)
@@ -72,7 +72,7 @@ level_scores_add_vuids(struct virtual_mailbox *vbox,
        t_array_init(&vuids_arr, count);
        t_array_init(&backend_uids, 64);
        for (i = 0; i < count; i++)
-               seq_range_array_add(&backend_uids, 0, scores[i].uid);
+               seq_range_array_add(&backend_uids, scores[i].uid);
        vbox->vfuncs.get_virtual_uid_map(&vbox->box, br->box,
                                         &backend_uids, &vuids_arr);
 
index dc0f8f288be99cd4bcf2303150aa825a2ecdc799..51f8eb6563738e5fab634988a6eac04e5c1f2e2e 100644 (file)
@@ -79,7 +79,7 @@ static void virtual_search_get_records(struct mail_search_context *ctx,
                i_assert(result != 0);
                if (result > 0) {
                        /* full match, no need to check this any further */
-                       seq_range_array_add(&vctx->result, 0, ctx->seq);
+                       seq_range_array_add(&vctx->result, ctx->seq);
                } else {
                        /* possible match, save and check later */
                        mail_index_lookup_ext(mbox->box.view, ctx->seq,
@@ -153,7 +153,7 @@ bool virtual_search_next_nonblock(struct mail_search_context *ctx,
                /* the messages won't be returned sorted, so we'll have to
                   do it ourself */
                while (index_storage_search_next_nonblock(ctx, mail_r, tryagain_r))
-                       seq_range_array_add(&vctx->result, 0, (*mail_r)->seq);
+                       seq_range_array_add(&vctx->result, (*mail_r)->seq);
                if (*tryagain_r)
                        return FALSE;
 
index 9babba93866fb08ad8ac7a5b2d130ed15d6add8a..1ea5c04cfa47c823f82d3f48cfb15db1ebf23eed 100644 (file)
@@ -424,7 +424,7 @@ virtual_get_virtual_uids(struct mailbox *box,
        while (seq_range_array_iter_nth(&iter, n++, &uid)) {
                while (i < count && uids[i].real_uid < uid) i++;
                if (i < count && uids[i].real_uid == uid) {
-                       seq_range_array_add(virtual_uids_r, 0,
+                       seq_range_array_add(virtual_uids_r, 
                                            uids[i].virtual_uid);
                        i++;
                }
index 818fa3d740c6be8cf6bcfc190d59ca36393a10fb..894a7018bbc8e40f4267055dcc06d91f4bb66772 100644 (file)
@@ -659,10 +659,10 @@ virtual_sync_backend_handle_old_vmsgs(struct virtual_sync_context *ctx,
 
                        if (mail_index_lookup_seq(bbox->box->view,
                                                  vrec->real_uid, &seq)) {
-                               seq_range_array_add(&result->uids, 0,
+                               seq_range_array_add(&result->uids, 
                                                    vrec->real_uid);
                        } else {
-                               seq_range_array_add(&result->removed_uids, 0,
+                               seq_range_array_add(&result->removed_uids,
                                                    vrec->real_uid);
                        }
                }
@@ -705,7 +705,7 @@ static int virtual_sync_backend_box_continue(struct virtual_sync_context *ctx,
                        modseq = mail_index_modseq_lookup(view, seq);
                        if (modseq > bbox->sync_highest_modseq) {
                                mail_index_lookup_uid(view, seq, &uid);
-                               seq_range_array_add(&flag_update_uids, 0, uid);
+                               seq_range_array_add(&flag_update_uids, uid);
                        }
                }
        }
@@ -755,7 +755,7 @@ static void virtual_sync_drop_existing(struct virtual_backend_box *bbox,
                        continue;
                }
                if (uidmap[i].real_uid == add_uid) {
-                       seq_range_array_add(&drop_uids, 0, add_uid);
+                       seq_range_array_add(&drop_uids, add_uid);
                        i++;
                }
                if (!seq_range_array_iter_nth(&iter, n++, &add_uid))
@@ -789,7 +789,7 @@ static void virtual_sync_drop_nonexistent(struct virtual_backend_box *bbox,
                        continue;
                }
                if (uidmap[i].real_uid != remove_uid)
-                       seq_range_array_add(&drop_uids, 0, remove_uid);
+                       seq_range_array_add(&drop_uids, remove_uid);
                else
                        i++;
                if (!seq_range_array_iter_nth(&iter, n++, &remove_uid)) {
@@ -799,7 +799,7 @@ static void virtual_sync_drop_nonexistent(struct virtual_backend_box *bbox,
        }
        if (!iter_done) {
                do {
-                       seq_range_array_add(&drop_uids, 0, remove_uid);
+                       seq_range_array_add(&drop_uids, remove_uid);
                } while (seq_range_array_iter_nth(&iter, n++, &remove_uid));
        }
        seq_range_array_remove_seq_range(removed_uids, &drop_uids);
@@ -913,7 +913,7 @@ static void virtual_sync_expunge_add(struct virtual_sync_context *ctx,
        for (i = idx1; i < count; i++) {
                if (uidmap[i].real_uid > uid2)
                        break;
-               seq_range_array_add(&ctx->sync_expunges, 0, uidmap[i].real_uid);
+               seq_range_array_add(&ctx->sync_expunges, uidmap[i].real_uid);
        }
 }
 
@@ -1371,7 +1371,7 @@ virtual_sync_apply_existing_expunges(struct virtual_mailbox *mbox,
                        if (!array_is_created(&bbox->sync_outside_expunges))
                                i_array_init(&bbox->sync_outside_expunges, 32);
                }
-               seq_range_array_add(&bbox->sync_outside_expunges, 0,
+               seq_range_array_add(&bbox->sync_outside_expunges, 
                                    vrec->real_uid);
        }
 }