Changeset 138 in libcf


Ignore:
Timestamp:
07/18/13 14:15:44 (11 years ago)
Author:
cheese
Message:

#1 enhance a few performance of bitwise

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/cf_bitwise.c

    r131 r138  
    120120                       cf_byte  * out)
    121121{
    122     int     result = 0;
    123     cf_byte * buf1 = NULL;
    124     cf_byte * buf2 = NULL;
    125 
    126     ASSERT_ARGS (!in || !out);
    127 
    128     buf1 = (cf_byte *) calloc (size, 1);
    129     buf2 = (cf_byte *) calloc (size, 1);
    130 
    131     if (!buf1 || !buf2)
    132         result = CF_ERROR_BITWISE_ALLOCATE_BUFFER;
    133     else
    134     {
    135         CF_Bitwise_ShiftLeft (in, size, offset, buf1);
    136         CF_Bitwise_ShiftRight (in, size, size - offset, buf2);
    137 
    138         CF_Bitwise_OR (buf1, buf2, size, out);
    139     }
    140 
    141     if (buf1)   free (buf1);
    142     if (buf2)   free (buf2);
    143 
    144     return result;
     122    cf_byte * buf = NULL;
     123
     124    ASSERT_ARGS (!in || !out);
     125
     126    /* make buffer two times of size */
     127    buf = (cf_byte *) calloc (size, 2);
     128    if (!buf)
     129        return CF_ERROR_BITWISE_ALLOCATE_BUFFER;
     130
     131    CF_Bitwise_ShiftLeft (in, size, offset, buf);
     132    CF_Bitwise_ShiftRight (in, size, size - offset, buf + size);
     133
     134    CF_Bitwise_OR (buf, buf + size, size, out);
     135
     136    free (buf);
     137
     138    return CF_OK;
    145139}
    146140
     
    161155                        cf_byte * out)
    162156{
    163     int     result = 0;
    164     cf_byte * buf1 = NULL;
    165     cf_byte * buf2 = NULL;
    166 
    167     ASSERT_ARGS (!in || !out);
    168 
    169     buf1 = (cf_byte *) calloc (size, 1);
    170     buf2 = (cf_byte *) calloc (size, 1);
    171 
    172     if (!buf1 || !buf2)
    173         result = CF_ERROR_BITWISE_ALLOCATE_BUFFER;
    174     else
    175     {
    176         CF_Bitwise_ShiftRight (in, size, offset, buf1);
    177         CF_Bitwise_ShiftLeft (in, size, size - offset, buf2);
    178 
    179         CF_Bitwise_OR (buf1, buf2, size, out);
    180     }
    181 
    182     if (buf1)   free (buf1);
    183     if (buf2)   free (buf2);
    184 
    185     return result;
     157    cf_byte * buf = NULL;
     158
     159    ASSERT_ARGS (!in || !out);
     160
     161    /* make buffer two times of size */
     162    buf = (cf_byte *) calloc (size, 2);
     163    if (!buf)
     164        return CF_ERROR_BITWISE_ALLOCATE_BUFFER;
     165
     166    CF_Bitwise_ShiftRight (in, size, offset, buf);
     167    CF_Bitwise_ShiftLeft (in, size, size - offset, buf + size);
     168
     169    CF_Bitwise_OR (buf, buf + size, size, out);
     170
     171    free (buf);
     172
     173    return CF_OK;
    186174}
    187175
Note: See TracChangeset for help on using the changeset viewer.