Beispiel #1
0
int mxcoding_lil_ppg(unsigned char *pdes, unsigned char *psrc, int block_size, int packet_size, lil_t *pzlil, int m, int k){
    int row, col;
    int i, j, p;
    int times;
    int rest_size;
    int bgfsize, pgfsize;
    gfele_t val;
    gfele_t *pgdes, *pgsrc;
    (void)m;
    (void)k;

    assert(block_size >= packet_size);

    //row = ZLIL_ROW(m, k);
    //col = ZLIL_COL(m, k);
    row = pzlil->row;
    col = pzlil->col;
    times = block_size/packet_size;
    bgfsize = block_size/sizeof(gfele_t);
    pgfsize = packet_size/sizeof(gfele_t);

    memset(pdes, 0, row*((size_t)block_size));

    rest_size = block_size - times*packet_size;
    
    if(rest_size == 0){
        pgdes = (gfele_t *)pdes;
        pgsrc = (gfele_t *)psrc;
        for(i = 0; i < row; ++i){
            for(p = 0; p < times; ++p){
                for(j = 0; j < col; ++j){
                    val = (gfele_t)pzlil->data[i*col+j];
                    region_xor(pgdes, pgsrc+val*bgfsize+p*pgfsize, packet_size);
                }
                pgdes = pgdes + pgfsize;
            }
        }
    }else{
        pgdes = (gfele_t *)pdes;
        for(i = 0; i < row; ++i){
            for(p = 0; p < times; ++p){
                pgsrc = (gfele_t *)(psrc + p*packet_size);
                for(j = 0; j < col; ++j){
                    val = (gfele_t)pzlil->data[i*col+j];
                    region_xor(pgdes, pgsrc+val*bgfsize, packet_size);
                }
                pgdes = pgdes + pgfsize;
            }
            pgsrc = (gfele_t *)(psrc+times*packet_size);
            for(j = 0; j < col; ++j){
                val = (gfele_t)pzlil->data[i*col+j];
                region_xor(pgdes, pgsrc+val*bgfsize, rest_size);
            }
            pgdes = pgdes + rest_size/sizeof(gfele_t);
        }
    
    }

    return 1;
}
Beispiel #2
0
int mxcoding_dbg(unsigned char *pdes, unsigned char *psrc, int block_size, int packet_size, gfmat_t *pmat){
    int row, col;
    int i, j, k;
    int times;
    int rest_size;
    int pgfsize;
    gfele_t val;
    gfele_t *pgdes, *pgsrc;

    assert(block_size >= packet_size);

    row = pmat->row;
    col = pmat->col;
    times = block_size/packet_size;
    pgfsize = packet_size/sizeof(gfele_t);

    rest_size = block_size - times*packet_size;

    memset(pdes, 0, row*block_size);

    if(rest_size == 0){
        for(j = 0; j < col; ++j){
            for(i = 0; i < row; ++i){
                val = pmat->data[i*col+j];
                if(val == 0) continue;
                pgsrc = (gfele_t *)(psrc + j*block_size);
                pgdes = (gfele_t *)(pdes + i*block_size);
                for(k = 0; k < times; ++k){
                    region_xor(pgdes, pgsrc, packet_size);
                    pgsrc = pgsrc+pgfsize;
                    pgdes = pgdes+pgfsize;
                }
            }
        }
    }else{
        for(j = 0; j < col; ++j){
            for(i = 0; i < row; ++i){
                val = pmat->data[i*col+j];
                if(val == 0) continue;
                pgsrc = (gfele_t *)(psrc + j*block_size);
                pgdes = (gfele_t *)(pdes + i*block_size);
                for(k = 0; k < times; ++k){
                    region_xor(pgdes, pgsrc, packet_size);
                    pgsrc = pgsrc+pgfsize;
                    pgdes = pgdes+pgfsize;
                }
                region_xor(pgdes, pgsrc, rest_size);
            }
        }
    }

    return 1;
}
Beispiel #3
0
int mxcoding_pg(unsigned char *pdes, unsigned char *psrc, int block_size, gfmat_t *pmat){
    int i, j;
    int row, col;
    int bgfsize;
    gfele_t *pgdes, *pgsrc;
    gfele_t val;

    row = pmat->row;
    col = pmat->col;
    bgfsize = block_size/sizeof(gfele_t);

    memset(pdes, 0, row*block_size);

    pgdes = (gfele_t *)pdes;
    for(i = 0; i < row; ++i){
        pgsrc = (gfele_t *)psrc;
        for(j = 0; j < col; ++j){
            val = pmat->data[i*col+j];
            if(val == 1){
                region_xor(pgdes, pgsrc, block_size);
            }
            pgsrc = pgsrc + bgfsize;
        }
        pgdes = pgdes + bgfsize;
    }

    return 1;
}
void region_dot_product(char **from_bufs, char *to_buf, int *matrix_row, int num_entries, int blocksize)
{
  int i;
  
  for (i = 0; i < num_entries; i++) {
    int mult = matrix_row[i];
    if (mult == 1) {
      region_xor(from_bufs[i], to_buf, blocksize);
    } else {
      region_multiply(from_bufs[i], to_buf, mult, 1, blocksize);
    }
  }
}
Beispiel #5
0
// TODO: optimize M2 -> do{}while
int mcoding_dpg_ss(unsigned char *pdes, unsigned char *psrc, int block_size, int packet_size, gfmat_t *pmat, gfs_t *gfs){
    int row, col;
    int i, j, k;
    int times;
    int rest_size;
    gfele_t val;
    unsigned char *ppdes, *ppsrc, *pcom;
    int *hindex;
    int shift;
    gfele_t mask;

    assert(block_size >= packet_size);

    row = pmat->row;
    col = pmat->col;
    times = block_size/packet_size;
    rest_size = block_size - times*packet_size;

    hindex = (int *)malloc(col*sizeof(int));
    init_hindex(hindex, pmat);
    pcom = (unsigned char *)malloc(packet_size);

    memset(pdes, 0, row*block_size);
   
    if(rest_size == 0){
        ppsrc = psrc;
        for(j = 0; j < col; ++j){
            for(k = 0; k < times; ++k){
                memcpy(pcom, ppsrc, packet_size);
                for(shift = 0, mask = 1; shift < hindex[j]; ++shift, mask<<=1){
                    ppdes = pdes + k*packet_size;
                    for(i = 0; i < row; ++i){
                        val = pmat->data[i*col+j];
                        if(val&mask){
                            //regionxor
                            region_xor(ppdes, pcom, packet_size);
                        }
                        ppdes = ppdes + block_size;
                    }
                    gfs->region_mul2((gfele_t *)pcom, packet_size);
                    //region_mul_2_64_w8((gfele_t *)pcom, packet_size);
                    //region_shift_mul_w8(pcom, pcom, 2, packet_size, 0);
                }
                ppsrc = ppsrc + packet_size;
            }
        }
    }else{
        ppsrc = psrc;
        for(j = 0; j < col; ++j){
            for(k = 0; k < times; ++k){
                memcpy(pcom, ppsrc, packet_size);
                for(shift = 0, mask = 1; shift < hindex[j]; ++shift, mask<<=1){
                    ppdes = pdes + k*packet_size;
                    for(i = 0; i < row; ++i){
                        val = pmat->data[i*col+j];
                        if(val&mask){
                            //regionxor
                            region_xor(ppdes, pcom, packet_size);
                        }
                        ppdes = ppdes + block_size;
                    }
                    gfs->region_mul2((gfele_t *)pcom, packet_size);
                    //region_mul_2_64_w8((gfele_t *)pcom, packet_size);
                    //region_shift_mul_w8(pcom, pcom, 2, packet_size, 0);
                }
                ppsrc = ppsrc + packet_size;
            }
            memcpy(pcom, ppsrc, rest_size);
            for(shift = 0, mask = 1; shift < hindex[j]; ++shift, mask<<=1){
                ppdes = pdes+ times*packet_size;
                for(i = 0; i < row; ++i){
                    val = pmat->data[i*col+j];
                    if(val&mask){
                        //regionxor
                        region_xor(ppdes, pcom, rest_size);
                    }
                    ppdes = ppdes + block_size;
                }
                gfs->region_mul2((gfele_t *)pcom, rest_size);
                //region_mul_2_64_w8((gfele_t *)pcom, rest_size);
                //region_shift_mul_w8(pcom, pcom, 2, rest_size, 0);
            }
            ppsrc = ppsrc + rest_size;
        }
    }

    free(pcom);
    free(hindex);
    return 1;
}