Changeset 1b6b76d in mainline for uspace/app/bithenge/sequence.c


Ignore:
Timestamp:
2012-08-12T05:10:17Z (12 years ago)
Author:
Sean Bartell <wingedtachikoma@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2988aec7
Parents:
6be4142
Message:

Bithenge: improve efficiency by making out_size optional in prefix_apply

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/bithenge/sequence.c

    r6be4142 r1b6b76d  
    546546                return rc;
    547547
    548         rc = seq_node_field_offset(node_as_seq(*out_node), out_size,
    549             self->num_subtransforms);
    550         if (rc != EOK) {
    551                 bithenge_node_dec_ref(*out_node);
    552                 return rc;
     548        if (out_size) {
     549                rc = seq_node_field_offset(node_as_seq(*out_node), out_size,
     550                    self->num_subtransforms);
     551                if (rc != EOK) {
     552                        bithenge_node_dec_ref(*out_node);
     553                        return rc;
     554                }
    553555        }
    554556
     
    815817                return rc;
    816818
    817         bithenge_int_t count = node_as_repeat(*out_node)->count;
    818         if (count != -1) {
    819                 rc = seq_node_field_offset(node_as_seq(*out_node), out_size, count);
    820                 if (rc != EOK) {
    821                         bithenge_node_dec_ref(*out_node);
    822                         return rc;
    823                 }
    824         } else {
    825                 *out_size = 0;
    826                 for (count = 1; ; count++) {
    827                         aoff64_t size;
     819        if (out_size) {
     820                bithenge_int_t count = node_as_repeat(*out_node)->count;
     821                if (count != -1) {
    828822                        rc = seq_node_field_offset(node_as_seq(*out_node),
    829                             &size, count);
    830                         if (rc != EOK)
    831                                 break;
    832                         *out_size = size;
     823                            out_size, count);
     824                        if (rc != EOK) {
     825                                bithenge_node_dec_ref(*out_node);
     826                                return rc;
     827                        }
     828                } else {
     829                        *out_size = 0;
     830                        for (count = 1; ; count++) {
     831                                aoff64_t size;
     832                                rc = seq_node_field_offset(
     833                                    node_as_seq(*out_node), &size, count);
     834                                if (rc != EOK)
     835                                        break;
     836                                *out_size = size;
     837                        }
    833838                }
    834839        }
     
    10871092                return rc;
    10881093
    1089         rc = bithenge_node_for_each(*out_node, for_each_noop, NULL);
    1090         if (rc != EOK) {
    1091                 bithenge_node_dec_ref(*out_node);
    1092                 return rc;
    1093         }
    1094 
    1095         rc = seq_node_field_offset(node_as_seq(*out_node), out_size,
    1096             node_as_do_while(*out_node)->count);
    1097         if (rc != EOK) {
    1098                 bithenge_node_dec_ref(*out_node);
    1099                 return rc;
     1094        if (out_size) {
     1095                rc = bithenge_node_for_each(*out_node, for_each_noop, NULL);
     1096                if (rc != EOK) {
     1097                        bithenge_node_dec_ref(*out_node);
     1098                        return rc;
     1099                }
     1100
     1101                rc = seq_node_field_offset(node_as_seq(*out_node), out_size,
     1102                    node_as_do_while(*out_node)->count);
     1103                if (rc != EOK) {
     1104                        bithenge_node_dec_ref(*out_node);
     1105                        return rc;
     1106                }
    11001107        }
    11011108
Note: See TracChangeset for help on using the changeset viewer.