void startplotting_succ(){ FILE *gnuplot_ins = popen("`which gnuplot`", "w"); FILE *gnuplot_succ = popen("`which gnuplot`", "w"); FILE *gnuplot_total = popen("`which gnuplot`", "w"); if (gnuplot_ins){ fprintf(gnuplot_ins, "set terminal png #FFFFFF nocrop enhanced font helvetica 12 size 1200,900\n"); fprintf(gnuplot_ins, "set output 'succ_ins.png'\n"); fprintf(gnuplot_ins, "set title 'Successor test: insert avg'\n"); fprintf(gnuplot_ins, "set ylabel 'Time (nano seconds)'\n"); //fprintf(gnuplot_ins, "set logscale x\n"); fprintf(gnuplot_ins, "plot '-' title 'vEB','-' title 'RB'\n"); } if (gnuplot_succ){ fprintf(gnuplot_succ, "set terminal png #FFFFFF nocrop enhanced font helvetica 12 size 1200,900\n"); fprintf(gnuplot_succ, "set output 'succ_succ.png'\n"); fprintf(gnuplot_succ, "set title 'Successor test: successor avg'\n"); fprintf(gnuplot_succ, "set ylabel 'Time (nano seconds)'\n"); //fprintf(gnuplot_succ, "set logscale x\n"); fprintf(gnuplot_succ, "plot '-' title 'vEB','-' title 'RB'\n"); } if (gnuplot_total){ fprintf(gnuplot_total, "set terminal png #FFFFFF nocrop enhanced font helvetica 12 size 1200,900\n"); fprintf(gnuplot_total, "set output 'succ_total.png'\n"); fprintf(gnuplot_total, "set title 'Successor test: total running time'\n"); fprintf(gnuplot_total, "set ylabel 'Time (mili seconds)'\n"); fprintf(gnuplot_total, "plot '-' title 'vEB','-' title 'RB'\n"); printf("\nTesting vEB succ\n"); int i; for (i = 1000; i < 10000; i += 100) plot_succ_veb(i, calc_log2(i), gnuplot_ins, gnuplot_succ, gnuplot_total); for (i = 10000; i < 100000; i += 1000) plot_succ_veb(i, calc_log2(i), gnuplot_ins, gnuplot_succ, gnuplot_total); for (i = 100000; i < 1000000; i += 10000) plot_succ_veb(i, calc_log2(i), gnuplot_ins, gnuplot_succ, gnuplot_total); for (i = 1000000; i <= 14000000; i += 100000) plot_succ_veb(i, calc_log2(i), gnuplot_ins, gnuplot_succ, gnuplot_total); if (gnuplot_ins) fprintf(gnuplot_ins, "e\n"); if (gnuplot_succ) fprintf(gnuplot_succ, "e\n"); if (gnuplot_total) fprintf(gnuplot_total, "e\n"); printf("\nTesting RB succ\n"); for (i = 1000; i < 10000; i += 100) plot_succ_rb(i, calc_log2(i), gnuplot_ins, gnuplot_succ, gnuplot_total); for (i = 10000; i < 100000; i += 1000) plot_succ_rb(i, calc_log2(i), gnuplot_ins, gnuplot_succ, gnuplot_total); for (i = 100000; i < 1000000; i += 10000) plot_succ_rb(i, calc_log2(i), gnuplot_ins, gnuplot_succ, gnuplot_total); for (i = 1000000; i <= 14000000; i += 100000) plot_succ_rb(i, calc_log2(i), gnuplot_ins, gnuplot_succ, gnuplot_total); if (gnuplot_ins){ fprintf(gnuplot_ins, "e\n"); fclose(gnuplot_ins);} if (gnuplot_succ){ fprintf(gnuplot_succ, "e\n"); fclose(gnuplot_succ);} if (gnuplot_total){fprintf(gnuplot_total, "e\n"); fclose(gnuplot_total);}} }
const T& get_constant_ln2() { static T result; static bool b = false; if(!b) { calc_log2(result, geofeatures_boost::multiprecision::detail::digits2<number<T, et_on> >::value); b = true; } constant_initializer<T, &get_constant_ln2<T> >::do_nothing(); return result; }
const T& get_constant_ln2() { static BOOST_MP_THREAD_LOCAL T result; static BOOST_MP_THREAD_LOCAL long digits = 0; #ifndef BOOST_MP_USING_THREAD_LOCAL static BOOST_MP_THREAD_LOCAL bool b = false; constant_initializer<T, &get_constant_ln2<T> >::do_nothing(); if(!b || (digits != boost::multiprecision::detail::digits2<number<T> >::value())) { b = true; #else if ((digits != boost::multiprecision::detail::digits2<number<T> >::value())) { #endif calc_log2(result, boost::multiprecision::detail::digits2<number<T, et_on> >::value()); digits = boost::multiprecision::detail::digits2<number<T> >::value(); } return result; }
static block_info_t *init_block(int block_size, uint16_t unit_flags){ f3s_extptr_t extptr, next; f3s_unit_t unit; block_info_t ** binfo; uint32_t position; uint16_t extent_flags; uint8_t *init_blk_ptr; // // setup the block allocation structure // binfo = realloc (block_info, (block_index + 1) * sizeof(block_info_t *)); if (binfo == NULL) return (NULL); block_info = binfo; block_info[block_index] = (block_info_t *)malloc(sizeof(block_info_t)); if (block_info[block_index] == NULL) mk_flash_exit("malloc failed: %s\n", strerror(errno)); block_info[block_index]->block_index = block_index; block_info[block_index]->available_space = block_size; block_info[block_index]->offset_top = 0; block_info[block_index]->block_size = block_size; block_info[block_index]->offset_bottom = block_size; block_info[block_index]->extent_index = 0; block_info[block_index]->next = NULL; // // every block will contain a unit header information // structure // unit.status = swap16(target_endian,unit_flags); unit.struct_size = swap16(target_endian,sizeof(unit)); unit.endian = target_endian ? 'B' : 'L'; unit.age = 0; // hard coded, does not apply here if (unit_flags&F3S_UNIT_NO_LOGI) unit.logi = ~0; else unit.logi = swap16(target_endian,block_index+1); unit.unit_pow2 = swap16(target_endian,calc_log2(block_size)); unit.reserve = 0xffff; unit.erase_count = 0; // hard coded, does not apply here // // setup the f3s_extptr_t to boot structure // these values are hard coded since they should not change // extptr.logi_unit = swap16(target_endian,F3S_FIRST_LOGI); extptr.index = swap16(target_endian,F3S_BOOT_INDEX); unit.boot = extptr; // // create a memory region to build our block // if ((init_blk_ptr = (char *) malloc(block_size)) == NULL) mk_flash_exit("memory allocation failed: %s\n",strerror(errno)); // // initialize block // memset(init_blk_ptr,0xff,block_size); // // the unit header info is written at the start of each block // memcpy(init_blk_ptr,&unit,sizeof(unit)); position = (block_info[block_index]->block_index) * block_info[block_index]->block_size; lseek(flashimage, position,SEEK_SET); if (write(flashimage,init_blk_ptr,block_size) != block_size) mk_flash_exit("write failed: %s\n",strerror(errno)); // // write extent information // next.logi_unit = FNULL; next.index = FNULL; extent_flags = ~F3S_EXT_TYPE & 0xff00; extent_flags |= (F3S_EXT_SYS | F3S_EXT_NO_NEXT | F3S_EXT_NO_SUPER | F3S_EXT_NO_SPLIT | F3S_EXT_ALLOC |F3S_EXT_LAST); write_extent(block_info[block_index], next, extent_flags, sizeof(unit)); // // update block information structure // block_info[block_index]->available_space -= sizeof(unit); block_info[block_index]->offset_top = sizeof(unit); // // free our malloc'd memory // block_index++; free(init_blk_ptr); return block_info[block_index-1]; }