Changeset 153 in libcf


Ignore:
Timestamp:
10/31/13 10:41:51 (10 years ago)
Author:
cheese
Message:

#1 fix bitwise simplify

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/cf_bitwise.c

    r138 r153  
    1616    if ((x))            \
    1717        return CF_ERROR_BITWISE_INVALID_ARGS
     18
    1819/**
    1920 * 비트열을 왼쪽으로 시프트
     
    3738    size_t  remain = offset % 8;
    3839    size_t  byteSize = size / 8;
    39 
     40    size_t  loop = byteSize - quota;
     41
     42    size_t  idx = 0;
    4043    size_t  maskPos = 8 - remain;
    41     cf_byte mask = 0;
    42     cf_byte buf = 0;
    43 
    44     ASSERT_ARGS (!in || !out);
    45 
    46     for (iter = 0 ; iter < remain ; iter++)
    47         mask |= (cf_byte)(0x80 >> iter);
     44    cf_byte mask = (cf_byte)(0xff << (8 - remain));
     45
     46    ASSERT_ARGS (!in || !out);
    4847
    4948    out[0] = (cf_byte)(in[0 + quota] << remain);
    5049
    51     for (iter = 1 ; iter < byteSize - quota ; iter++)
     50    for (iter = 1 ; iter < loop ; iter++)
    5251    {
    53         buf = in[iter + quota] & mask;
    54 
    55         out[iter    ]  = (cf_byte)(in[iter + quota] << remain);
    56         out[iter - 1] |= (cf_byte)(buf >> maskPos);
     52        idx = iter + quota;
     53
     54        out[iter    ]  = (cf_byte)((in[idx]       ) << remain);
     55        out[iter - 1] |= (cf_byte)((in[idx] & mask) >> maskPos);
    5756    }
    5857
     
    8180    size_t  remain = offset % 8;
    8281    size_t  byteSize = size / 8;
    83 
     82    size_t  loop = quota - 1;
     83
     84    size_t  idx = 0;
    8485    size_t  maskPos = 8 - remain;
    85     cf_byte mask = 0;
    86     cf_byte buf = 0;
    87 
    88     ASSERT_ARGS (!in || !out);
    89 
    90     for (iter = 0 ; iter < remain ; iter++)
    91         mask |= (cf_byte)(0x01 << iter);
     86    cf_byte mask = (cf_byte)(0xff >> (8 - remain));
     87
     88    ASSERT_ARGS (!in || !out);
    9289
    9390    out[byteSize - 1] = (cf_byte)(in[byteSize - 1 - quota] >> remain);
    9491
    95     for (iter = byteSize - 2 ; iter > quota - 1 ; iter--)
     92    for (iter = byteSize - 2 ; iter > loop ; iter--)
    9693    {
    97         buf = in[iter - quota] & mask;
    98 
    99         out[iter    ]  = (cf_byte)(in[iter - quota] >> remain);
    100         out[iter + 1] |= (cf_byte)(buf << maskPos);
     94        idx = iter - quota;
     95
     96        out[iter    ]  = (cf_byte)((in[idx]       ) >> remain);
     97        out[iter + 1] |= (cf_byte)((in[idx] & mask) << maskPos);
    10198    }
    10299
Note: See TracChangeset for help on using the changeset viewer.