Ejemplo n.º 1
0
int exfat_bitmap_free_clusters(exfat_bs_t *bs, exfat_node_t *nodep, 
    exfat_cluster_t count)
{
	exfat_cluster_t lastc;
	lastc = nodep->firstc + ROUND_UP(nodep->size, BPC(bs)) / BPC(bs) - 1;
	lastc -= count;

	return exfat_bitmap_clear_clusters(bs, nodep->idx->service_id, lastc + 1, count);
}
Ejemplo n.º 2
0
int exfat_bitmap_replicate_clusters(exfat_bs_t *bs, exfat_node_t *nodep)
{
	int rc;
	exfat_cluster_t lastc, clst;
	service_id_t service_id = nodep->idx->service_id;
	lastc = nodep->firstc + ROUND_UP(nodep->size, BPC(bs)) / BPC(bs) - 1;

	for (clst = nodep->firstc; clst < lastc; clst++) {
		rc = exfat_set_cluster(bs, service_id, clst, clst + 1);
		if (rc != EOK)
			return rc;
	}

	return exfat_set_cluster(bs, service_id, lastc, EXFAT_CLST_EOF);
}
Ejemplo n.º 3
0
void MSD_seq(char **ffpp, char **ffii, const int nin, /**/ float *out) {

    BopData *dpp0, *dii0, *dpp, *dii;
    const int *ii0, *ii;
    const float *pp0, *pp;
    long np;

    BPC( bop_ini(&dpp0) );
    BPC( bop_ini(&dii0) );
    
    read_data(ffpp[0], dpp0, ffii[0], dii0);
    pp0 = (const float *) bop_get_data(dpp0);
    ii0 = (const   int *) bop_get_data(dii0);

    BPC( bop_get_n(dii0, &np) );
    const int buffsize = max_index(ii0, np) + 1;

    float *rr0 = new float[3*buffsize]; /* initial  positions     */
    float *rrc = new float[3*buffsize]; /* current  positions     */
    float *rrp = new float[3*buffsize]; /* previous positions     */
    float *ddL = new float[3*buffsize]; /* helper for periodic BC */

    memset(rr0, 0, 3*buffsize*sizeof(float));
    memset(ddL, 0, 3*buffsize*sizeof(float));
    pp2rr_sorted(ii0, pp0, np, 6, /**/ rr0);
    memcpy(rrp, rr0, 3*buffsize*sizeof(float));
    
    for (int i = 1; i < nin; ++i) {
        BPC( bop_ini(&dpp) );
        BPC( bop_ini(&dii) );
        
        read_data(ffpp[i], dpp, ffii[i], dii);
        pp = (const float *) bop_get_data(dpp);
        ii = (const   int *) bop_get_data(dii);

        memset(rrc, 0, 3*buffsize*sizeof(float));
        pp2rr_sorted(ii, pp, np, 6, /**/ rrc);
        updddL(rrp, rrc, buffsize, /**/ ddL);

        out[i-1] = MSD(rr0, rrc, ddL, buffsize, np);
        
        BPC( bop_fin(dpp) );
        BPC( bop_fin(dii) );
        memcpy(rrp, rrc, 3*buffsize*sizeof(float));
    }

    delete[] rr0; delete[] rrc;
    delete[] rrp; delete[] ddL;
    BPC( bop_fin(dpp0) );
    BPC( bop_fin(dii0) );
}
Ejemplo n.º 4
0
int exfat_bitmap_append_clusters(exfat_bs_t *bs, exfat_node_t *nodep, 
    exfat_cluster_t count)
{
	if (nodep->firstc == 0) {
		return exfat_bitmap_alloc_clusters(bs, nodep->idx->service_id, 
		    &nodep->firstc, count);
	} else {
		exfat_cluster_t lastc, clst;
		lastc = nodep->firstc + ROUND_UP(nodep->size, BPC(bs)) / BPC(bs) - 1;

		clst = lastc + 1;
		while (exfat_bitmap_is_free(bs, nodep->idx->service_id, clst) == EOK) {
			if (clst - lastc == count){
				return exfat_bitmap_set_clusters(bs, nodep->idx->service_id, 
				    lastc + 1, count);
			} else
				clst++;
		}
		return ENOSPC;
	}
}