Exemplo n.º 1
0
void ep2_mul_fix_yaowi(ep2_t r, ep2_t *t, bn_t k) {
	int i, j, l;
	ep2_t a;
	uint8_t win[CEIL(2 * FP_BITS, EP_DEPTH)];

	ep2_null(a);

	TRY {
		ep2_new(a);

		ep2_set_infty(r);
		ep2_set_infty(a);

		l = CEIL(2 * FP_BITS, EP_DEPTH);
		bn_rec_win(win, &l, k, EP_DEPTH);

		for (j = (1 << EP_DEPTH) - 1; j >= 1; j--) {
			for (i = 0; i < l; i++) {
				if (win[i] == j) {
					ep2_add(a, a, t[i]);
				}
			}
			ep2_add(r, r, a);
		}
		ep2_norm(r, r);
	}
	CATCH_ANY {
		THROW(ERR_CAUGHT);
	}
	FINALLY {
		ep2_free(a);
	}
}
Exemplo n.º 2
0
Arquivo: jgfs.c Projeto: jgottula/jgfs
bool jgfs_enlarge(struct jgfs_dir_ent *dir_ent, uint32_t new_size) {
	uint32_t clust_size = jgfs_clust_size();
	
	if (new_size <= dir_ent->size) {
		errx(1, "jgfs_enlarge: new_size is not larger");
	}
	
	bool nospc = false;
	uint16_t clust_before = CEIL(dir_ent->size, clust_size),
		clust_after = CEIL(new_size, clust_size);
	fat_ent_t new_addr;
	
	if (clust_before != clust_after) {
		/* special case for zero-size files */
		if (dir_ent->size == 0) {
			if (jgfs_fat_find(FAT_FREE, &new_addr)) {
				dir_ent->begin = new_addr;
				jgfs_fat_write(new_addr, FAT_EOF);
				
				clust_before = 1;
			} else {
				return false;
			}
		}
		
		fat_ent_t this = dir_ent->begin, next;
		
		for (uint16_t i = 1; i < clust_after; ++i) {
			next = jgfs_fat_read(this);
			
			/* this means the filesystem is inconsistent */
			if (this == FAT_EOF && i < clust_before) {
				warnx("jgfs_enlarge: found premature FAT_EOF in clust chain");
				clust_before = i;
			}
			
			if (i >= clust_before) {
				if (jgfs_fat_find(FAT_FREE, &new_addr)) {
					jgfs_fat_write(this, new_addr);
					jgfs_fat_write(new_addr, FAT_EOF);
					
					this = new_addr;
				} else {
					clust_after = i - 1;
					new_size = clust_after * clust_size;
					nospc = true;
					break;
				}
			} else {
				this = next;
			}
		}
	}
	
	jgfs_zero_span(dir_ent, dir_ent->size, new_size - dir_ent->size);
	
	dir_ent->size = new_size;
	
	return !nospc;
}
Exemplo n.º 3
0
static int
_fill_polygon_gray8(uint8_t *img,
        int npoints, Edge *e, uint8_t intensity, 
        int w, int h, int rowstride)
{
    int i, j;
    float *xx;
    int ymin, ymax;
    float y;

    if (npoints <= 0) return 0;

    /* Find upper and lower polygon boundary (within image) */
    ymin = e[0].ymin;
    ymax = e[0].ymax;
    for (i = 1; i < npoints; i++) {
        if (e[i].ymin < ymin) ymin = e[i].ymin;
        if (e[i].ymax > ymax) ymax = e[i].ymax;
    }

    if (ymin < 0) ymin = 0;
    if (ymax >= h) ymax = h-1;

    /* Process polygon edges */
    xx = malloc(npoints * sizeof(float));
    if (!xx) return -1;

    for (;ymin <= ymax; ymin++) {
        y = ymin+0.5F;
        for (i = j = 0; i < npoints; i++) {
            if (y >= e[i].ymin && y <= e[i].ymax) {
                if (e[i].d == 0)
                    draw_hline_gray8(img, e[i].xmin, ymin, e[i].xmax, 
                            intensity, w, h, rowstride);
                else
                    xx[j++] = (y-e[i].y0) * e[i].dx + e[i].x0;
            }
        }
        if (j == 2) {
            if (xx[0] < xx[1])
                draw_hline_gray8(img, CEIL(xx[0]-0.5), ymin, FLOOR(xx[1]+0.5),
                        intensity, w, h, rowstride);
            else
                draw_hline_gray8(img, CEIL(xx[1]-0.5), ymin, FLOOR(xx[0]+0.5),
                        intensity, w, h, rowstride);
        } else {
            qsort(xx, j, sizeof(float), x_cmp);
            for (i = 0; i < j-1 ; i += 2)
                draw_hline_gray8(img, CEIL(xx[i]-0.5), ymin, FLOOR(xx[i+1]+0.5),
                        intensity, w, h, rowstride);
        }
    }

    free(xx);

    return 0;
}
Exemplo n.º 4
0
/* So, all of the encodings point to the ->screen->frameBuffer,
 * We need to change this!
 */
void rfbScaledCorrection(rfbScreenInfoPtr from, rfbScreenInfoPtr to, int *x, int *y, int *w, int *h, char *function)
{
    double x1,y1,w1,h1, x2, y2, w2, h2;
    double scaleW = ((double) to->width) / ((double) from->width);
    double scaleH = ((double) to->height) / ((double) from->height);


    /*
     * rfbLog("rfbScaledCorrection(%p -> %p, %dx%d->%dx%d (%dXx%dY-%dWx%dH)\n",
     * from, to, from->width, from->height, to->width, to->height, *x, *y, *w, *h);
     */

    /* If it's the original framebuffer... */
    if (from==to) return;

    x1 = ((double) *x) * scaleW;
    y1 = ((double) *y) * scaleH;
    w1 = ((double) *w) * scaleW;
    h1 = ((double) *h) * scaleH;


    /*cast from double to int is same as "*x = floor(x1);" */
    x2 = FLOOR(x1);
    y2 = FLOOR(y1);

    /* include into W and H the jitter of scaling X and Y */
    w2 = CEIL(w1 + ( x1 - x2 ));
    h2 = CEIL(h1 + ( y1 - y2 ));

    /*
     * rfbLog("%s (%dXx%dY-%dWx%dH  ->  %fXx%fY-%fWx%fH) {%dWx%dH -> %dWx%dH}\n",
     *    function, *x, *y, *w, *h, x2, y2, w2, h2,
     *    from->width, from->height, to->width, to->height);
     */

    /* simulate ceil() without math library */
    *x = (int)x2;
    *y = (int)y2;
    *w = (int)w2;
    *h = (int)h2;

    /* Small changes for a thumbnail may be scaled to zero */
    if (*w==0) (*w)++;
    if (*h==0) (*h)++;
    /* scaling from small to big may overstep the size a bit */
    if (*x+*w > to->width)  *w=to->width - *x;
    if (*y+*h > to->height) *h=to->height - *y;
}
Exemplo n.º 5
0
int str9xpec_set_instr(jtag_tap_t *tap, u32 new_instr, tap_state_t end_state)
{
	if( tap == NULL ){
		return ERROR_TARGET_INVALID;
	}

	if (buf_get_u32(tap->cur_instr, 0, tap->ir_length) != new_instr)
	{
		scan_field_t field;

		field.tap = tap;
		field.num_bits = tap->ir_length;
		field.out_value = calloc(CEIL(field.num_bits, 8), 1);
		buf_set_u32(field.out_value, 0, field.num_bits, new_instr);
		field.out_mask = NULL;
		field.in_value = NULL;
		field.in_check_value = NULL;
		field.in_check_mask = NULL;
		field.in_handler = NULL;
		field.in_handler_priv = NULL;

		jtag_add_ir_scan(1, &field, end_state);

		free(field.out_value);
	}

	return ERROR_OK;
}
Exemplo n.º 6
0
/* Footprint of a blob ----------------------------------------------------- */
void footprint_blob(
    ImageOver &blobprint,         // blob foot_print table
    const struct blobtype &blob,  // blob description
    int   istep,            // number of foot-print samples per one sample
    // on projection plane in u,v directions
    int   normalise)        // set to 1 if you want normalise. Usually
// you may omit it and no normalisation is performed
{
    // Resize output image and redefine the origin of it
    int footmax = CEIL(blob.radius);
    blobprint.init(-footmax, footmax, istep, -footmax, footmax, istep);

    // Run for Imge class indexes
    for (int i = STARTINGY(blobprint()); i <= FINISHINGY(blobprint()); i++)
        for (int j = STARTINGX(blobprint()); j <= FINISHINGX(blobprint()); j++)
        {
            // Compute oversampled index and blob value
            double vi, ui;
            IMG2OVER(blobprint, i, j, vi, ui);
            double r = sqrt(vi * vi + ui * ui);
            IMGPIXEL(blobprint, i, j) = blob_proj(r, blob);
        }

    // Adjust the footprint structure
    if (normalise)
        blobprint() /= blobprint().sum();
}
Exemplo n.º 7
0
//Given a chunk, calculates the number of the chunks needed to complete a relative chunk, forwards.
static inline size_t get_chunks_to_complete_relative_chunk(size_t chunk, size_t chunk_size, size_t other_chunk_size)
{
	uint64_t delta = get_next_relative_chunk_position(chunk, chunk_size, other_chunk_size) - get_chunk_position(chunk, chunk_size);
	if (delta)
		return CEIL(delta, chunk_size);
	return 0;
}
Exemplo n.º 8
0
integer i_sceiling(real *x)
#endif
{
#define CEIL(x) ((int)(x) + ((x) > 0 && (x) != (int)(x)))

    return (integer) CEIL(*x);
}
Exemplo n.º 9
0
void
bcm_rpc_tp_dump(rpc_tp_info_t *rpcb)
{
	printf("\nRPC_TP_RTE:\n");
	printf("bufalloc %d(buf_cnt_inuse %d) tx %d(txerr %d) rx %d(rxdrop %d)\n",
		rpcb->bufalloc, rpcb->buf_cnt_inuse, rpcb->tx_cnt, rpcb->txerr_cnt,
		rpcb->rx_cnt, rpcb->rxdrop_cnt);

	printf("tx_flowctrl_cnt %d tx_flowctrl_status %d hwm %d lwm %d hit_hiwm #%d segcnt %d\n",
		rpcb->tx_flowctl_cnt, rpcb->tx_flowcontrolled,
		rpcb->tx_q_flowctl_hiwm, rpcb->tx_q_flowctl_lowm, rpcb->tx_q_flowctl_highwm_cnt,
		rpcb->tx_q_flowctl_segcnt);

	printf("tp_dngl_agg sf_limit %d bytes_limit %d aggregation 0x%x lazy %d\n",
		rpcb->tp_dngl_agg_sframes_limit, rpcb->tp_dngl_agg_bytes_max,
		rpcb->tp_dngl_aggregation, rpcb->tp_dngl_agg_lazy);
	printf("agg counter: chain %u, sf %u, bytes %u byte-per-chain %u, bypass %u noagg %u\n",
		rpcb->tp_dngl_agg_cnt_chain, rpcb->tp_dngl_agg_cnt_sf,
		rpcb->tp_dngl_agg_cnt_bytes,
	        (rpcb->tp_dngl_agg_cnt_chain == 0) ?
	        0 : CEIL(rpcb->tp_dngl_agg_cnt_bytes, (rpcb->tp_dngl_agg_cnt_chain)),
		rpcb->tp_dngl_agg_cnt_pass, rpcb->tp_dngl_agg_cnt_noagg);

	printf("\n");

	printf("tp_dngl_deagg chain %u sf %u bytes %u clone %u badsflen %u badfmt %u\n",
		rpcb->tp_dngl_deagg_cnt_chain, rpcb->tp_dngl_deagg_cnt_sf,
		rpcb->tp_dngl_deagg_cnt_bytes, rpcb->tp_dngl_deagg_cnt_clone,
		rpcb->tp_dngl_deagg_cnt_badsflen, rpcb->tp_dngl_deagg_cnt_badfmt);
	printf("tp_dngl_deagg byte-per-chain %u passthrough %u\n",
		(rpcb->tp_dngl_deagg_cnt_chain == 0) ?
		0 : rpcb->tp_dngl_deagg_cnt_bytes/rpcb->tp_dngl_deagg_cnt_chain,
		rpcb->tp_dngl_deagg_cnt_pass);
}
Exemplo n.º 10
0
int cp_ecss_sig(bn_t e, bn_t s, uint8_t *msg, int len, bn_t d) {
	bn_t n, k, x, r;
	ec_t p;
	uint8_t hash[MD_LEN];
	uint8_t m[len + FC_BYTES];
	int result = STS_OK;

	bn_null(n);
	bn_null(k);
	bn_null(x);
	bn_null(r);
	ec_null(p);

	TRY {
		bn_new(n);
		bn_new(k);
		bn_new(x);
		bn_new(r);
		ec_new(p);

		ec_curve_get_ord(n);
		do {
			bn_rand_mod(k, n);
			ec_mul_gen(p, k);
			ec_get_x(x, p);
			bn_mod(r, x, n);
		} while (bn_is_zero(r));

		memcpy(m, msg, len);
		bn_write_bin(m + len, FC_BYTES, r);
		md_map(hash, m, len + FC_BYTES);

		if (8 * MD_LEN > bn_bits(n)) {
			len = CEIL(bn_bits(n), 8);
			bn_read_bin(e, hash, len);
			bn_rsh(e, e, 8 * MD_LEN - bn_bits(n));
		} else {
			bn_read_bin(e, hash, MD_LEN);
		}

		bn_mod(e, e, n);

		bn_mul(s, d, e);
		bn_mod(s, s, n);
		bn_sub(s, n, s);
		bn_add(s, s, k);
		bn_mod(s, s, n);
	}
	CATCH_ANY {
		result = STS_ERR;
	}
	FINALLY {
		bn_free(n);
		bn_free(k);
		bn_free(x);
		bn_free(r);
		ec_free(p);
	}
	return result;
}
Exemplo n.º 11
0
struct hashtable * create_hashtable(unsigned int minsize,
						uint32_t (*hashfn) (String key),
						boolean (*eqfn) (const String str1, const String str2))
{
    struct hashtable *h;
    unsigned int pindex, size = primes[0];
    /* Check requested hashtable isn't too large */
    if (minsize > MAX_HASH_TABLE_SIZE) return NULL;
    /* Enforce size as prime */
    for (pindex=0; pindex < prime_table_length; pindex++) {
        if (primes[pindex] >= minsize) { size = primes[pindex]; break; }
    }
    h = (struct hashtable *)EXIP_MALLOC(sizeof(struct hashtable));
    if (NULL == h) return NULL; /*oom*/
    h->table = (struct entry **)EXIP_MALLOC(sizeof(struct entry*) * size);
    if (NULL == h->table) { EXIP_MFREE(h); return NULL; } /*oom*/
    memset(h->table, 0, size * sizeof(struct entry *));
    h->tablelength  = size;
    h->primeindex   = pindex;
    h->entrycount   = 0;
    h->hashfn       = hashfn;
    h->eqfn         = eqfn;
    h->loadlimit    = CEIL(size * max_load_factor);
    return h;
}
Exemplo n.º 12
0
static void exec_viewtiles(const char* args, context_t* ctx, debug_t* dbg)
{
    (void)args;
    (void)ctx;

    if (!dbg->show_tiles) {
        dbg->window = window_create(
            "Tiles",
            (DBG_TILES_PER_ROW) * (TILE_WIDTH + 1),
            CEIL(MAX_TILES, DBG_TILES_PER_ROW) * (TILE_HEIGHT + 1)
        );

        if (dbg->window == NULL) {
            printf("Failed to create window\n");
            return;
        }
    } else {
        window_free(dbg->window);
        dbg->window = NULL;
    }

    dbg->show_tiles = !dbg->show_tiles;
    
    printf("Toggling tile view.\n");
}
Exemplo n.º 13
0
void Column::Resize(size_t num) {
	num_tuples_ = num;
	const size_t new_num_blocks = CEIL(num, kNumTuplesPerBlock);
	const size_t old_num_blocks = blocks_.size();
	if (new_num_blocks > old_num_blocks) {    // need to add blocks
		// fill up the last block
		blocks_[old_num_blocks - 1]->Resize(kNumTuplesPerBlock);
		// append new blocks
		for (size_t bid = old_num_blocks; bid < new_num_blocks; bid++) {
			ColumnBlock* new_block = CreateNewBlock();
			new_block->Resize(kNumTuplesPerBlock);
			blocks_.push_back(new_block);
		}
	} else if (new_num_blocks < old_num_blocks) {   // need to remove blocks
		for (size_t bid = old_num_blocks - 1; bid > new_num_blocks; bid--) {
			delete blocks_.back();
			blocks_.pop_back();
		}
	}
	// now the number of block is desired
	// correct the size of the last block
	size_t num_tuples_last_block = num % kNumTuplesPerBlock;
	if (0 < num_tuples_last_block) {
		blocks_.back()->Resize(num_tuples_last_block);
	}

	assert(blocks_.size() == new_num_blocks);
}
Exemplo n.º 14
0
Arquivo: ops.c Projeto: jgottula/jgfs
int jg_getattr(const char *path, struct stat *buf) {
	struct jgfs_dir_clust *parent;
	struct jgfs_dir_ent   *child;
	int rtn;
	if ((rtn = jgfs_lookup(path, &parent, &child)) != 0) {
		return rtn;
	}
	
	buf->st_nlink = 1;
	buf->st_uid = 0;
	buf->st_gid = 0;
	buf->st_size = child->size;
	buf->st_blocks = CEIL(child->size, jgfs_clust_size());
	buf->st_atime = buf->st_ctime = buf->st_mtime = child->mtime;
	
	if (child->type == TYPE_FILE) {
		buf->st_mode = 0644 | S_IFREG;
	} else if (child->type == TYPE_DIR) {
		buf->st_mode = 0755 | S_IFDIR;
	} else if (child->type == TYPE_SYMLINK) {
		buf->st_mode = 0777 | S_IFLNK;
	} else {
		errx(1, "jg_getattr: unknown type 0x%x", child->type);
	}
	
	return 0;
}
Exemplo n.º 15
0
void FORTE_F_CEIL::executeEvent(int pa_nEIID){
  switch(pa_nEIID){
    case scm_nEventREQID:
      OUT() = CEIL(X());
      sendOutputEvent(scm_nEventCNFID);
      break;
  }
}
Exemplo n.º 16
0
void access_bank(uint64_t gpu_mask, int shift, uint64_t iter){

	int oft = 0;
	if(gpu_mask > 0){ 
		g_mem_size += gpu_mask;
		oft +=  gpu_mask / 4;
	}
	if(shift >= 0){
		g_mem_size += (uint64_t)1 << shift;
		oft += ((uint64_t)1 << shift) / 4;
	}

	g_mem_size +=  farest_dist;
	g_mem_size = CEIL(g_mem_size, min_interval);

	/* alloc memory. align to a page boundary */
	int fd = open("/dev/mem", O_RDWR | O_SYNC);
	void *addr = (void *) 0x1000000080000000;
	int *memchunk = NULL;
	
	if (fd < 0) {
		perror("Open failed");
		exit(1);
	}

	memchunk = mmap(0, g_mem_size,
			PROT_READ | PROT_WRITE, 
			MAP_SHARED, 
			fd, (off_t)addr);

	if (memchunk == MAP_FAILED) {
		perror("failed to alloc");
		exit(1);
	}

	list = &memchunk[oft];

	next = 0; 
	struct timespec start, end;
	clock_gettime(CLOCK_REALTIME, &start);

	/* access banks */
	uint64_t naccess = run(iter);

	clock_gettime(CLOCK_REALTIME, &end);

	uint64_t nsdiff = get_elapsed(&start, &end);
	//printf("bandwidth %.2f MB/s\n", 64.0*1000.0*(double)naccess/(double)nsdiff);
	if(shift >= 0)
		bandwidth[shift] = 64.0 * 1000.0 * (double)naccess/(double)nsdiff;
	else
		bandwidth[MAX_SHIFT_NUM - 1] = 64.0 * 1000.0 * (double)naccess/(double)nsdiff;

		munmap(memchunk, g_mem_size);
		close(fd);
}
Exemplo n.º 17
0
static int64_t alignTimeUp(int64_t ts, int unit, int count)
{
	switch (unit) {
	case FT_SECOND:
		ts = CEIL(ts, count * 1000);
		break;
	case FT_MINUTE:
		ts = CEIL(ts, count * 60 * 1000);
		break;
	case FT_HOUR:
		ts = CEIL(ts, count * 3600 * 1000);
		break;
	default:
		// TODO: more FT_XXX
		break;
	}

	return ts;
}
    QRenderedFontFT(QDiskFont* f, const QFontDef &d) :
	QRenderedFont(f,d)
    {
	QDiskFontFT *df = (QDiskFontFT*)(f->p);
	myface=df->face;
	selectThisSize();
	// A 1-pixel baseline is excluded in Qt/Windows/X11 fontmetrics
	// (see QFontMetrics::height())
	//
	fascent=CEIL(myface->size->metrics.ascender)/64;
	fdescent=-FLOOR(myface->size->metrics.descender)/64-1;
	fmaxwidth=CEIL(myface->size->metrics.max_advance)/64;
	fleading=CEIL(myface->size->metrics.height)/64
	    - fascent - fdescent - 1;

	// FT has these in font units
	funderlinepos = ptsize/200+1;
	funderlinewidth = ptsize/200+1;
    }
Exemplo n.º 19
0
static int hashtable_expand(struct hashtable *h)
{
    /* Double the size of the table to accommodate more entries */
    struct entry **newtable;
    struct entry *e;
    struct entry **pE;
    unsigned int newsize, i, index;
    /* Check we're not hitting max capacity */
    if (h->primeindex == (prime_table_length - 1) || primes[h->primeindex + 1] > MAX_HASH_TABLE_SIZE) return 0;
    newsize = primes[++(h->primeindex)];

    newtable = (struct entry **)EXIP_MALLOC(sizeof(struct entry*) * newsize);
    if (NULL != newtable)
    {
        memset(newtable, 0, newsize * sizeof(struct entry *));
        /* This algorithm is not 'stable'. ie. it reverses the list
         * when it transfers entries between the tables */
        for (i = 0; i < h->tablelength; i++) {
            while (NULL != (e = h->table[i])) {
                h->table[i] = e->next;
                index = indexFor(newsize,e->hash);
                e->next = newtable[index];
                newtable[index] = e;
            }
        }
        EXIP_MFREE(h->table);
        h->table = newtable;
    }
    /* Plan B: realloc instead */
    else 
    {
        newtable = (struct entry **) EXIP_REALLOC(h->table, newsize * sizeof(struct entry *));
        if (NULL == newtable) { (h->primeindex)--; return 0; }
        h->table = newtable;
        memset(newtable[h->tablelength], 0, newsize - h->tablelength);
        for (i = 0; i < h->tablelength; i++) {
            for (pE = &(newtable[i]), e = *pE; e != NULL; e = *pE) {
                index = indexFor(newsize,e->hash);
                if (index == i)
                {
                    pE = &(e->next);
                }
                else
                {
                    *pE = e->next;
                    e->next = newtable[index];
                    newtable[index] = e;
                }
            }
        }
    }
    h->tablelength = newsize;
    h->loadlimit   = CEIL(newsize * max_load_factor);
    return -1;
}
Exemplo n.º 20
0
void NS_DIM_PREFIX BElementXferBndS (BNDS **bnds, int n, int proc, int prio)
{
  INT size,i,size0;

  size = CEIL(sizeof(INT));
  for (i=0; i<n; i++)
    if (bnds[i] != NULL)
    {
      size0 = BND_SIZE(bnds[i]);
      size += CEIL(size0) + CEIL(sizeof(INT));

      PRINTDEBUG(dom,1,("BElementXferBndS(): Xfer  me %x "
                        "%d pid %d n %d size %d\n",
                        me,bnds[i],BND_PATCH_ID(bnds[i]),
                        BND_N(bnds[i]),BND_SIZE(bnds[i])));

    }

  DDD_XferAddData(size,DDD_DOMAIN_DATA);
}
Exemplo n.º 21
0
//process the current window, and advance to the next one.
//Returns a negative number on a failure, a zero when there are still more windows to go, and a 1 when done.
static inline int process_window(ctr_crypto_interface *io, write_window *window, size_t sector_size, size_t block_size, void (*input_function)(void *io, void *buffer, uint64_t block, size_t block_count), void (*output_function)(void *io, void *buffer, uint64_t block, size_t block_count))
{
	//FIXME what if we try to read more than there is disk? Return zeros?
	size_t sectors_to_read = (window->window_size - window->window_offset) / sector_size;
	int res = ctr_io_read_sector(io->lower_io, window->window + window->window_offset, window->window_size - window->window_offset, window->current_sector, sectors_to_read);
	if (res)
		return -1;

	size_t block_start_offset = window->block_offset;
	uint8_t *pos = window->window + block_start_offset;

	size_t amount_to_copy = window->window_size - window->window_offset;
	if (amount_to_copy > window->buffer_size - window->buffer_offset)
		amount_to_copy = window->buffer_size - window->buffer_offset;

	//In the case that blocks are aligned to sectors, this is not necessary... FIXME
	//only process parts that won't be overwritten completely
	//	from block_start_offset to window->window_offset
	size_t blocks_to_process = CEIL(window->window_offset - block_start_offset, block_size);
	if (!blocks_to_process) blocks_to_process = 1;
	output_function(io, pos, window->block, blocks_to_process);

	//now copy data from buffer
	memcpy(window->window + window->window_offset, window->buffer + window->buffer_offset, amount_to_copy);
	window->buffer_offset += amount_to_copy;

	blocks_to_process = CEIL(amount_to_copy + window->window_offset - block_start_offset, block_size);
	input_function(io, pos, window->block, blocks_to_process);

	//We need to write out the full blocks processed actually, not just the sectors
	size_t sectors_processed = (amount_to_copy + window->window_offset) / sector_size;
	size_t sectors_to_copy = CEIL(blocks_to_process * block_size, sector_size);
	res = ctr_io_write_sector(io->lower_io, window->window, sectors_to_copy * sector_size, window->sector);
	if (res)
		return -2;

	//Copy sector that contain part of next block
	update_window(window, sectors_processed);

	return window->buffer_offset >= window->buffer_size;
}
Exemplo n.º 22
0
// Computes the parameter <m> of the algorithm, given the parameter
// <k> and the desired success probability <successProbability>. Only
// meaningful when functions <g> are interdependent (pairs of
// functions <u>, where the <m> functions <u> are each k/2-tuples of
// independent LSH functions).    //g函数是相关时,有用! 为了减少计算时间
IntT computeMForULSH(IntT k, RealT successProbability){
  ASSERT((k & 1) == 0); // k should be even in order to use ULSH.
  RealT mu = 1 - POW(computeFunctionP(PARAMETER_W_DEFAULT, 1), k / 2);    //1-p1^(k/2)   ,为1 说明c=1
  RealT P = successProbability;
  RealT d = (1-mu)/(1-P)*1/LOG(1/mu) * POW(mu, -1/(1-mu));     //(p1^k/2)/delta*log(1/(p1^k/2))*((1-p1^k/2)^(-1/(p1^(k/2)))) 
  RealT y = LOG(d);
  IntT m = CEIL(1 - y/LOG(mu) - 1/(1-mu));
  while (POW(mu, m-1) * (1 + m * (1-mu)) > 1 - P){      //13
    m++;
  }
  return m;
}
Exemplo n.º 23
0
static void
ellipsePoint(int cx, int cy, int w, int h,
             float i, int *x, int *y)
{
    float i_cos, i_sin;
    float x_f, y_f;
    double modf_int;
    i_cos = cos(i*M_PI/180);
    i_sin = sin(i*M_PI/180);
    x_f = (i_cos * w/2) + cx;
    y_f = (i_sin * h/2) + cy;
    if (modf(x_f, &modf_int) == 0.5) {
        *x = i_cos > 0 ? FLOOR(x_f) : CEIL(x_f);
    } else {
        *x = FLOOR(x_f + 0.5);
    }
    if (modf(y_f, &modf_int) == 0.5) {
        *y = i_sin > 0 ? FLOOR(y_f) : CEIL(y_f);
    } else {
        *y = FLOOR(y_f + 0.5);
    }
}
Exemplo n.º 24
0
// Fill DF with evenly distributed rot & tilt =================================
void make_even_distribution(std::vector<double> &rotList, std::vector<double> &tiltList,
							double sampling, SymList &SL, bool include_mirror)
{
    int rot_nstep, tilt_nstep = ROUND(180. / sampling) + 1;
    double rot_sam, tilt, tilt_sam;
    bool append;
    tilt_sam = (180. / tilt_nstep);

    // Create evenly distributed angles
    rotList.clear();
    tiltList.clear();
    rotList.reserve(20000);  // Normally there are many less directions than 20000
    tiltList.reserve(20000); // Set to 20000 to avoid resizing
    Matrix2D<double> L(3,3),R(3,3);
    for (int tilt_step = 0; tilt_step < tilt_nstep; tilt_step++)
    {
        tilt = ((double)tilt_step / (tilt_nstep - 1)) * 180.;
        if (tilt > 0)
            rot_nstep = CEIL(360. * sin(DEG2RAD(tilt)) / sampling);
        else
            rot_nstep = 1;
        rot_sam = 360. / (double)rot_nstep;
        for (double rot = 0.; rot < 360.; rot += rot_sam)
        {
            // Check whether by symmetry or mirror the angle has been included already
            append = true;
            size_t imax=rotList.size();
            double *ptrRot=NULL;
            double *ptrTilt=NULL;
            if (imax>0)
            {
            	ptrRot=&rotList[0];
            	ptrTilt=&tiltList[0];
            }
            for (size_t i=0; i<imax; ++i, ++ptrRot, ++ptrTilt)
            {
                if (!directions_are_unique(rot, tilt, *ptrRot, *ptrTilt, rot_sam, tilt_sam, SL,
                                           include_mirror, L, R))
                {
                    append = false;
                    break;
                }
            }
            if (append)
            {
            	rotList.push_back(rot);
            	tiltList.push_back(tilt);
            }
        }
    }
}
Exemplo n.º 25
0
Arquivo: jgfs.c Projeto: jgottula/jgfs
void jgfs_reduce(struct jgfs_dir_ent *dir_ent, uint32_t new_size) {
	if (new_size >= dir_ent->size) {
		errx(1, "jgfs_reduce: new_size is not smaller");
	}
	
	uint16_t clust_before = CEIL(dir_ent->size, jgfs_clust_size()),
		clust_after = CEIL(new_size, jgfs_clust_size());
	
	if (clust_before != clust_after) {
		fat_ent_t this = dir_ent->begin, next;
		
		for (uint16_t i = 1; i <= clust_before; ++i) {
			next = jgfs_fat_read(this);
			
			/* this means the filesystem is inconsistent */
			if (this == FAT_EOF && i < clust_before) {
				warnx("jgfs_reduce: found premature FAT_EOF in clust chain");
				break;
			}
			
			if (i == clust_after) {
				jgfs_fat_write(this, FAT_EOF);
			} else if (i > clust_after) {
				jgfs_fat_write(this, FAT_FREE);
			}
			
			this = next;
		}
		
		/* special case for zero-size files */
		if (clust_after == 0) {
			jgfs_fat_write(dir_ent->begin, FAT_FREE);
			dir_ent->begin = FAT_NALLOC;
		}
	}
	
	dir_ent->size = new_size;
}
Exemplo n.º 26
0
void NS_DIM_PREFIX BElementGatherBndS (BNDS **bnds, int n, int cnt, char *data)
{
  INT size,i;

  for (i=0; i<n; i++)
    if (bnds[i] != NULL)
    {

      PRINTDEBUG(dom,1,("BElementGatherBndS(): %d  "
                        "me %d %x pid %d n %d size %d\n",i,
                        me,bnds[i],BND_PATCH_ID(bnds[i]),
                        BND_N(bnds[i]),BND_SIZE(bnds[i])));


      size = BND_SIZE(bnds[i]);
      memcpy(data,&i,sizeof(INT));
      data += CEIL(sizeof(INT));
      memcpy(data,bnds[i],size);
      data += CEIL(size);
    }
  i = -1;
  memcpy(data,&i,sizeof(INT));
}
Exemplo n.º 27
0
// pack reverse complement read
void packRevComp(char *sym, uint8_t *pck, uint8_t len)
{
  memset(pck, 0, CEIL(len, 4)*sizeof(uint8_t));      
  
  for (uint32_t i = 0; i < len; i++) {
    switch (sym[i]) {
    case 'A': setVal(pck, i, 3); break;
    case 'C': setVal(pck, i, 2); break;
    case 'G': setVal(pck, i, 1); break;
    case 'T': setVal(pck, i, 0); break;
    default : setVal(pck, i, 0);
    }
  }
}
Exemplo n.º 28
0
int str9xpec_handle_part_id_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
	flash_bank_t *bank;
	scan_field_t field;
	u8 *buffer = NULL;
	jtag_tap_t *tap;
	u32 idcode;
	str9xpec_flash_controller_t *str9xpec_info = NULL;

	if (argc < 1)
	{
		return ERROR_COMMAND_SYNTAX_ERROR;
	}

	bank = get_flash_bank_by_num(strtoul(args[0], NULL, 0));
	if (!bank)
	{
		command_print(cmd_ctx, "flash bank '#%s' is out of bounds", args[0]);
		return ERROR_OK;
	}

	str9xpec_info = bank->driver_priv;
	tap = str9xpec_info->tap;

	buffer = calloc(CEIL(32, 8), 1);

	str9xpec_set_instr(tap, ISC_IDCODE, TAP_IRPAUSE);

	field.tap = tap;
	field.num_bits = 32;
	field.out_value = NULL;
	field.out_mask = NULL;
	field.in_value = buffer;
	field.in_check_value = NULL;
	field.in_check_mask = NULL;
	field.in_handler = NULL;
	field.in_handler_priv = NULL;

	jtag_add_dr_scan(1, &field, TAP_IDLE);
	jtag_execute_queue();

	idcode = buf_get_u32(buffer, 0, 32);

	command_print(cmd_ctx, "str9xpec part id: 0x%8.8x", idcode);

	free(buffer);

	return ERROR_OK;
}
Exemplo n.º 29
0
void NS_DIM_PREFIX BElementScatterBndS (BNDS **bnds, int n, int cnt, char *data)
{
  INT size,i;
  BNDS *bs;

  memcpy(&i,data,sizeof(INT));
  while (i != -1)
  {
    data += CEIL(sizeof(INT));
    bs = (BNDS *) data;
    size = BND_SIZE(bs);

    PRINTDEBUG(dom,1,("BElementScatterBndS(): %d me %d\n",i,size));

    if (bnds[i] == NULL)
    {
      bs = (BNDS *) memmgr_AllocOMEM((size_t)size,TypeBndS,0,0);
      memcpy(bs,data,size);
      bnds[i] = bs;
    }
    data += CEIL(size);
    memcpy(&i,data,sizeof(INT));
  }
}
Exemplo n.º 30
0
char* convert(char* s, int numRows) {
    int len = strlen(s), unitSize = numRows == 1 ? 1 : numRows-1 << 1, unitCount = CEIL(len, unitSize), i, j;
    char* res = (char*)malloc(sizeof(char)*(len + 1)), *p =  res;
    for(i = 0; i < numRows; i++) {
        for(j = 0; j < unitCount; j++) {
            if(i == 0 || i == numRows - 1) {
                PUT_IF_EXISTS(p, s, len, j*unitSize + i);
            } else {
                PUT_IF_EXISTS(p, s, len, j*unitSize + i);
                PUT_IF_EXISTS(p, s, len, (j + 1)*unitSize - i);
            }
        }
    }
    *p = '\0';
    return res;
}