00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <flgrCoreData.h>
00023
00024
00025
00026 #define tbit fgBIT
00027 #define set(x) ((fgBIT) (x));
00028 #define shiftr(a,x) ((a)>>(x))
00029 #define shiftl(a,x) ((a)<<(x))
00030 #define and(a,b) ((a) & (b))
00031 #define or(a,b) ((a) | (b))
00032 #define empty()
00033
00034
00035
00036 void flgr1d_shift_1_right_spp1_fgBIT(FLGR_Data1D *datdest, FLGR_Data1D *datsrc, fgBIT insert) {
00037 tbit *pdest = (tbit*) datdest->array;
00038 tbit *psrc = (tbit*) datsrc->array;
00039 tbit r0;
00040 tbit r1;
00041 tbit r2;
00042 tbit rmask;
00043 int i;
00044 int nbvec = datdest->length / (sizeof(tbit)*8);
00045
00046 r2 = set((insert != 0) ? ((fgBIT) 1)<<(sizeof(tbit)*8-1) : 0);
00047 rmask = set(1);
00048
00049 for(i=0 ; i<nbvec+1; i++, psrc++, pdest++) {
00050 r0 = *psrc;
00051 r1 = shiftr(r0,1);
00052 r1 = or(r2,r1);
00053 r2 = and(r0,rmask);
00054 r2 = shiftl(r2,(sizeof(tbit)*8-1));
00055 *pdest = r1;
00056 }
00057 empty();
00058 }
00059
00060 void flgr1d_shift_1_left_spp1_fgBIT(FLGR_Data1D *datdest, FLGR_Data1D *datsrc, fgBIT insert) {
00061 tbit *pdest = (tbit*) datdest->array;
00062 tbit *psrc = (tbit*) datsrc->array;
00063 tbit r0;
00064 tbit r1;
00065 tbit r2;
00066 tbit rmask;
00067 int i;
00068 int nbvec = datdest->length / (sizeof(tbit)*8);
00069 int posvec = (sizeof(tbit)*8)-(datdest->length % (sizeof(tbit)*8));
00070
00071 rmask = set(((fgBIT) 1)<<(sizeof(tbit)*8-1));
00072
00073 r2 = set((insert != 0) ? ((fgBIT) 1)<<posvec : 0);
00074
00075 psrc += nbvec;
00076 pdest += nbvec;
00077
00078 for(i=nbvec+1 ; i>=0 ; i--, psrc--, pdest--) {
00079 r0 = *psrc;
00080 r1 = shiftl(r0,1);
00081 r1 = or(r2,r1);
00082 r2 = and(r0,rmask);
00083 r2 = shiftr(r2,(sizeof(tbit)*8-1));
00084 *pdest = r1;
00085 }
00086 empty();
00087 }