亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? x_tree.h

?? X-tree的C++源碼
?? H
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
	    // initialize mbr of R1 	    for (s = 0; s < 2*dimension; s += 2)	    {		rxmbr[s] =    MAXREAL;		rxmbr[s+1] = -MAXREAL;	    }            for (l = 0; l < m1+k; l++)            {                // calculate mbr of R1 		for (s = 0; s < 2*dimension; s += 2)	        {	            rxmbr[s] =   min(rxmbr[s],   sml[l].mbr[s]);	            rxmbr[s+1] = max(rxmbr[s+1], sml[l].mbr[s+1]);                }            }	    marg += margin(dimension, rxmbr);             // now calculate margin of R2	    // initialize mbr of R2 	    for (s = 0; s < 2*dimension; s += 2)	    {		rxmbr[s] =    MAXREAL;		rxmbr[s+1] = -MAXREAL;	    }            for ( ; l < n; l++)            {                // calculate mbr of R1 		for (s = 0; s < 2*dimension; s += 2)	        {	            rxmbr[s] =   min(rxmbr[s],   sml[l].mbr[s]);	            rxmbr[s+1] = max(rxmbr[s+1], sml[l].mbr[s+1]);                }            }	    marg += margin(dimension, rxmbr);         }        // for all possible distributions of smu       	for (k = 0; k < n - 2*m1 + 1; k++)        {            // now calculate margin of R1	    // initialize mbr of R1 	    for (s = 0; s < 2*dimension; s += 2)	    {		rxmbr[s] =    MAXREAL;		rxmbr[s+1] = -MAXREAL;	    }            for (l = 0; l < m1+k; l++)            {                // calculate mbr of R1 		for (s = 0; s < 2*dimension; s += 2)	        {	            rxmbr[s] =   min(rxmbr[s],   smu[l].mbr[s]);	            rxmbr[s+1] = max(rxmbr[s+1], smu[l].mbr[s+1]);                }            }	    marg += margin(dimension, rxmbr);             // now calculate margin of R2	    // initialize mbr of R2 	    for (s = 0; s < 2*dimension; s += 2)	    {		rxmbr[s] =    MAXREAL;		rxmbr[s+1] = -MAXREAL;	    }            for ( ; l < n; l++)            {                // calculate mbr of R1 		for (s = 0; s < 2*dimension; s += 2)	        {	            rxmbr[s] =   min(rxmbr[s],   smu[l].mbr[s]);	            rxmbr[s+1] = max(rxmbr[s+1], smu[l].mbr[s+1]);                }            }	    marg += margin(dimension, rxmbr);         }        // actual margin better than optimum?        if (marg < minmarg)        {            split_axis = i;            minmarg = marg;        }    }    /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */    *dim = split_axis;        // choose best distribution for split axis    for (j = 0; j < n; j++)    {	sml[j].index = smu[j].index = j;	sml[j].dimension = smu[j].dimension = split_axis;	sml[j].mbr = smu[j].mbr = mbr[j];    }	           // Sort by lower and upper value perpendicular split axis    qsort(sml, n, sizeof(SortMbr), sort_lower_mbr);    qsort(smu, n, sizeof(SortMbr), sort_upper_mbr);        minover = MAXREAL;    mindead = MAXREAL;    // for all possible distributions of sml and snu    for (k = 0; k < n - 2*m1 + 1; k++)    {        // lower sort	// now calculate margin of R1	// initialize mbr of R1         dead = 0.0;	for (s = 0; s < 2*dimension; s += 2)	{	    rxmbr[s] =    MAXREAL;	    rxmbr[s+1] = -MAXREAL;	}	for (l = 0; l < m1+k; l++)	{	    // calculate mbr of R1 	    for (s = 0; s < 2*dimension; s += 2)	    {		rxmbr[s] =   min(rxmbr[s],   sml[l].mbr[s]);		rxmbr[s+1] = max(rxmbr[s+1], sml[l].mbr[s+1]);	    }            dead -= area(dimension, sml[l].mbr);	}        dead += area(dimension, rxmbr);		// now calculate margin of R2	// initialize mbr of R2 	for (s = 0; s < 2*dimension; s += 2)	{	    rymbr[s] =    MAXREAL;       	    rymbr[s+1] = -MAXREAL;	}	for ( ; l < n; l++)	{	    // calculate mbr of R1 	    for (s = 0; s < 2*dimension; s += 2)	    {		rymbr[s] =   min(rymbr[s],   sml[l].mbr[s]);		rymbr[s+1] = max(rymbr[s+1], sml[l].mbr[s+1]);	    }            dead -= area(dimension, sml[l].mbr);	}        dead += area(dimension, rymbr);	over = overlap(dimension, rxmbr, rymbr);         if ((over < minover) ||	    (over == minover) && dead < mindead)        {            minover = over;            mindead = dead;            dist = m1+k;            lu = TRUE;        }        // upper sort	// now calculate margin of R1	// initialize mbr of R1         dead = 0.0;	for (s = 0; s < 2*dimension; s += 2)	{	    rxmbr[s] =    MAXREAL;	    rxmbr[s+1] = -MAXREAL;	}	for (l = 0; l < m1+k; l++)	{	    // calculate mbr of R1 	    for (s = 0; s < 2*dimension; s += 2)	    {		rxmbr[s] =   min(rxmbr[s],   smu[l].mbr[s]);		rxmbr[s+1] = max(rxmbr[s+1], smu[l].mbr[s+1]);	    }            dead -= area(dimension, smu[l].mbr);	}        dead += area(dimension, rxmbr);		// now calculate margin of R2	// initialize mbr of R2 	for (s = 0; s < 2*dimension; s += 2)	{	    rymbr[s] =    MAXREAL;	    rymbr[s+1] = -MAXREAL;	}	for ( ; l < n; l++)	{	    // calculate mbr of R1 	    for (s = 0; s < 2*dimension; s += 2)	    {		rymbr[s] =   min(rymbr[s],   smu[l].mbr[s]);		rymbr[s+1] = max(rymbr[s+1], smu[l].mbr[s+1]);	    }            dead -= area(dimension, smu[l].mbr);	}        dead += area(dimension, rxmbr);	over = overlap(dimension, rxmbr, rymbr);         if ((over < minover) ||	    (over == minover) && dead < mindead)        {            minover = over;            mindead = dead;            dist = m1+k;            lu = FALSE;        }    }    // calculate best distribution    *distribution = new int[n];        for (i = 0; i < n; i++)    {        if (lu)            (*distribution)[i] = sml[i].index;        else            (*distribution)[i] = smu[i].index;    }    delete [] sml;    delete [] smu;    delete [] rxmbr;    delete [] rymbr;    return dist;}    //////////////////////////////////////////////////////////////////////////////// XTDirNode//////////////////////////////////////////////////////////////////////////////template <class DATA> XTDirNode<DATA>::XTDirNode(int _nodesize, XTree<DATA> *rt)    : XTNode<DATA>(rt)// according block does not yet exist// _nodesize is the size of the new node{    int header_size, i;    DirEntry<DATA> * d;    nodesize = _nodesize;    // allocate one more intern blocks than necessary to avoid memory conflicts in    // read_from_buffer and write_to_buffer    intern_block = new int[nodesize+1];    // mal kurz einen Dateneintrag erzeugen und schauen, wie gross der wird..    d = new DirEntry<DATA>(dimension, rt);    // von der Blocklaenge geht die Headergroesse ab    header_size = sizeof(bool) + sizeof(char) + sizeof(int) + sizeof(int) + sizeof(int);    block_capacity = (rt->file->get_blocklength() - header_size) / d->get_size();    capacity = block_capacity * nodesize;    delete d;    // Eintraege erzeugen, das geht mit einem Trick, da C++ beim     // Initialisieren von Objektarrays nur Defaultkonstruktoren kapiert.    // Daher wird ueber globale Variablen die Information uebergeben.    XTDirNode__dimension = dimension;    XTDirNode__my_tree = my_tree;    entries = new DirEntry<DATA>[capacity];    // neue Plattenbloecke an File anhaengen    for (i = 0; i < nodesize; i++)    {	intern_block[i] = rt->file->append_block(rt->block_buffer);    }    block = intern_block[0];    rt->num_of_inodes ++;    // Plattenblock muss auf jeden Fall neu geschrieben werden    dirty = TRUE;}template <class DATA> XTDirNode<DATA>::XTDirNode(XTree<DATA> *rt, int _block)    : XTNode<DATA>(rt)// zugehoeriger Plattenblock existiert schon{    int header_size;    int l;    DirEntry<DATA> * d;    // mal kurz einen Dateneintrag erzeugen und schauen, wie gross der wird..    d = new DirEntry<DATA>(dimension, rt);    // von der Blocklaenge geht die Headergroesse ab    header_size = sizeof(bool) + sizeof(char) + sizeof(int) + sizeof(int) + sizeof(int);    block_capacity = (rt->file->get_blocklength() - header_size) / d->get_size();    delete d;    // first reading the header of the first block, to know how many blocks exist    block = _block;        rt->file->read_block(rt->block_buffer, block);    read_header(rt->block_buffer);    capacity = nodesize * block_capacity;    // allocate one more intern blocks than necessary to avoid memory conflicts in    // read_from_buffer and write_to_buffer    intern_block = new int[nodesize+1];    intern_block[0] = block;        // Eintraege erzeugen, das geht mit einem Trick, da C++ beim    // Initialisieren von Objektarrays nur Defaultkonstruktoren kapiert.    // Daher wird ueber globale Variablen die Information uebergeben.    XTDirNode__dimension = dimension;    XTDirNode__my_tree = my_tree;    entries = new DirEntry<DATA>[capacity];    // zugehoerigen Plattenblock holen und Daten einlesen    // dies kann nicht in XTNode::XTNode(..) passieren, weil    // beim Aufruf des Basisklassenkonstruktors XTDirNode noch    // gar nicht konstruiert ist, also auch keine Daten aufnehmen kann    for (l = 0; l < nodesize; l++)    {	rt->file->read_block(rt->block_buffer, intern_block[l]);	read_from_buffer(rt->block_buffer, l);    }        // Plattenblock muss vorerst nicht geschrieben werden    dirty = FALSE;}template <class DATA> XTDirNode<DATA>::~XTDirNode(){    int l;    if (dirty)    {	// writing data to the according physical blocks	for (l = 0; l < nodesize; l++)        {	    write_to_buffer(my_tree->block_buffer, l);	    my_tree->file->write_block(my_tree->block_buffer, intern_block[l]);	}        }    delete [] entries;}template <class DATA> void XTDirNode<DATA>::read_header(char *buffer){    int j;    // Lesen, ob Sohnknoten eine Datenseite ist    memcpy(&son_is_data, buffer, sizeof(bool));    j = sizeof(bool);    // Level des Knotens lesen    memcpy(&level, &buffer[j], sizeof(char));    j += sizeof(char);    // Anzahl der belegten Eintraege lesen    memcpy(&num_entries, &buffer[j], sizeof(int));    j += sizeof(int);    // Groesse des DirNodes    memcpy(&nodesize, &buffer[j], sizeof(int));    j += sizeof(int);}template <class DATA> void XTDirNode<DATA>::read_from_buffer(char *buffer, int offset)// reads the data from buffer// offset specifies the position of the entries and the block numbers of supernodes// in entries[] respectively intern_block[]{    int i, j, s;    // Lesen, ob Sohnknoten eine Datenseite ist    memcpy(&son_is_data, buffer, sizeof(bool));    j = sizeof(bool);    // Level des Knotens lesen    memcpy(&level, &buffer[j], sizeof(char));    j += sizeof(char);    // Anzahl der belegten Eintraege lesen    memcpy(&num_entries, &buffer[j], sizeof(int));    j += sizeof(int);    // Groesse des DirNodes    memcpy(&nodesize, &buffer[j], sizeof(int));    j += sizeof(int);    // Zeiger auf naechsten Block    memcpy(&intern_block[offset+1], &buffer[j], sizeof(int));    j += sizeof(int);       s = entries[0].get_size();    for (i = 0; i < block_capacity; i++)    {	entries[i + offset*block_capacity].read_from_buffer(&buffer[j]);	entries[i + offset*block_capacity].son_is_data = son_is_data;	j += s;    }}template <class DATA> void XTDirNode<DATA>::write_to_buffer(char *buffer, int offset)// writes the data to buffer// offset has the same function as in read_from_buffer{    int i, j, s;    // Schreiben, ob Sohnknoten eine Datenseite ist    memcpy(buffer, &son_is_data, sizeof(bool));    j = sizeof(bool);    // Level des Knotens schreiben    memcpy(&buffer[j], &level, sizeof(char));    j += sizeof(char);    // Anzahl der belegten Eintraege schreiben    memcpy(&buffer[j], &num_entries, sizeof(int));    j += sizeof(int);    // Groesse des DirNodes    memcpy(&buffer[j], &nodesize, sizeof(int));    j += sizeof(int);    // Zeiger auf naechsten Block (bei supernodes)    memcpy(&buffer[j], &intern_block[offset+1], sizeof(int));    j += sizeof(int);       s = entries[0].get_size();    for (i = 0; i < block_capacity; i++)    {	entries[i + offset*block_capacity].write_to_buffer(&buffer[j]);	j += s;    }}template <class DATA> void XTDirNode<DATA>::print(){    int i, n;    n = get_num();    for (i = 0; i < n ; i++)    {         printf("(%4.1lf, %4.1lf, %4.1lf, %4.1lf)\n", 	       entries[i].bounces[0],	       entries[i].bounces[1],	       entries[i].bounces[2],	       entries[i].bounces[3]);    }    printf("level %d\n", level);}template <class DATA> int XTDirNode<DATA>::get_num_of_data(){    int i, n, sum;    n = get_num();    sum = 0;    for (i = 0; i < n ; i++)        sum += entries[i].num_of_data;    return sum;}template <class DATA> float * XTDirNode<DATA>::get_mbr()// liefert mbr des Directoryknotens{    int i, j, n;    float *mbr;    mbr = new float[2*dimension];    for (i = 0; i < 2*dimension; i ++ )

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天色图综合网| 日韩免费看的电影| 9191久久久久久久久久久| 不卡一区二区三区四区| 国产一区二区三区免费看| 伦理电影国产精品| 国产精品一区二区三区网站| 激情五月播播久久久精品| 国产制服丝袜一区| av在线不卡免费看| 制服丝袜亚洲播放| 久久蜜桃一区二区| 国产精品毛片久久久久久久| 国产精品久久毛片| 夜夜嗨av一区二区三区网页 | 欧美日韩国产小视频| 日韩免费在线观看| 中文字幕五月欧美| 午夜在线成人av| 国产成人av电影在线播放| 欧美日韩性生活| 久久久久国产一区二区三区四区| 国产精品午夜电影| 亚洲免费视频中文字幕| 男男视频亚洲欧美| 成人h版在线观看| 欧美人与性动xxxx| 亚洲欧洲另类国产综合| 亚洲欧美日韩国产中文在线| 五月天丁香久久| 99国产精品久久久久久久久久 | 91视频国产观看| 亚洲精品在线三区| 天天综合网 天天综合色| 99精品视频在线播放观看| ww亚洲ww在线观看国产| 日韩不卡在线观看日韩不卡视频| 成人国产精品免费观看视频| 91精品国产综合久久精品性色| 婷婷综合另类小说色区| 欧美视频在线一区二区三区 | 日精品一区二区三区| 色综合视频一区二区三区高清| 久久久精品蜜桃| 国产高清亚洲一区| 2020国产精品自拍| 国产成人免费视频一区| 日韩欧美国产一区二区三区| 久久精品国产久精国产爱| 精品国产乱码久久久久久1区2区 | 精品一区二区三区久久久| 日韩一区二区三区视频在线| 韩日精品视频一区| 亚洲国产精品av| 不卡av免费在线观看| 亚洲欧美国产毛片在线| 欧美电影在线免费观看| 美美哒免费高清在线观看视频一区二区 | 成人国产电影网| 亚洲欧美日韩精品久久久久| 欧美日本在线看| 国产伦精一区二区三区| 国产精品盗摄一区二区三区| 欧美午夜精品免费| 国产精品亚洲第一区在线暖暖韩国| 欧美xxxxx牲另类人与| 成人精品国产一区二区4080| 亚洲第一精品在线| 精品国产3级a| 97精品电影院| 国内外成人在线| 亚洲四区在线观看| 欧美三级午夜理伦三级中视频| 日韩和欧美一区二区| 欧美极品aⅴ影院| 欧美性生交片4| 成人av在线观| 久久se这里有精品| 日韩黄色免费电影| 天天色图综合网| 午夜精品免费在线| 亚洲欧美日韩中文字幕一区二区三区 | 日本高清不卡在线观看| 国产老女人精品毛片久久| 日韩精品亚洲一区二区三区免费| 亚洲美女免费在线| 亚洲天堂中文字幕| 综合在线观看色| 一区二区三区四区蜜桃| 中日韩免费视频中文字幕| 久久精品人人爽人人爽| 精品福利视频一区二区三区| 久久影院视频免费| 国产精品色噜噜| 亚洲午夜久久久久久久久久久 | 欧美一级理论片| 精品国产百合女同互慰| 国产亚洲欧美日韩在线一区| 国产日韩精品一区| 国产精品久久毛片| 亚洲自拍偷拍网站| 日韩av网站在线观看| 国产激情一区二区三区| 91极品视觉盛宴| 久久久亚洲精品一区二区三区| 国产精品免费看片| 天天综合网 天天综合色| 美女看a上一区| 欧洲一区在线观看| 久久久久久久久一| 日韩精彩视频在线观看| 99久久综合精品| 日韩一区二区精品在线观看| 亚洲自拍都市欧美小说| 国产成人在线看| 久久综合久久综合久久| 国产一区二区精品久久99| 国产亚洲一区二区三区在线观看| 国产一区二区三区在线观看精品| 欧美r级电影在线观看| 韩国欧美国产一区| 国产亚洲综合性久久久影院| 99久久精品免费看国产| 午夜精品福利一区二区三区av | 韩国女主播一区二区三区| 久久久亚洲欧洲日产国码αv| 不卡一区在线观看| 五月天激情小说综合| 在线观看日韩电影| 欧美日韩精品一区二区三区四区| 国产精品激情偷乱一区二区∴| 黄一区二区三区| 国产午夜精品久久久久久久 | 日日夜夜免费精品| 在线欧美日韩精品| 日韩电影在线观看电影| 日韩午夜av一区| 国产91丝袜在线18| 日韩美女啊v在线免费观看| 欧美视频在线一区| 免费日本视频一区| 国产欧美视频一区二区三区| 91麻豆产精品久久久久久| 视频一区欧美精品| 久久久久国产一区二区三区四区 | 成人涩涩免费视频| 亚洲精品国产精华液| 日韩午夜激情av| 色又黄又爽网站www久久| 一区二区三区在线免费| 欧美成人aa大片| 在线亚洲高清视频| 国产高清亚洲一区| 成人性生交大片免费| 国产精品视频一二三区| 95精品视频在线| 国产精品久久精品日日| 色综合久久久久| 亚洲日本在线天堂| 99久久精品国产观看| 中文字幕一区不卡| 99久久夜色精品国产网站| 亚洲电影激情视频网站| 精品国产伦一区二区三区观看方式| 国内精品伊人久久久久av影院| **性色生活片久久毛片| 久久久久久99久久久精品网站| 欧美精品久久一区| 色综合婷婷久久| 91美女片黄在线观看91美女| 国产成人亚洲综合色影视| 久久精品国产一区二区| 亚洲444eee在线观看| 亚洲综合免费观看高清完整版在线 | 色综合天天综合| 99久久精品久久久久久清纯| 成人手机电影网| www.欧美日韩国产在线| 成人黄色国产精品网站大全在线免费观看 | 成人性生交大片免费看中文 | 久久久噜噜噜久久中文字幕色伊伊| 日韩欧美一区二区久久婷婷| 日韩一区二区中文字幕| 久久五月婷婷丁香社区| 久久久99久久| 亚洲精品视频在线观看网站| 一区二区三区电影在线播| 婷婷激情综合网| 国产在线不卡一卡二卡三卡四卡| 国产成人午夜99999| 99久久免费国产| 欧美丰满高潮xxxx喷水动漫| 精品国产乱码久久久久久闺蜜| 久久精品水蜜桃av综合天堂| 中文字幕综合网| 日韩精品亚洲一区二区三区免费| 秋霞成人午夜伦在线观看| 成人h动漫精品一区二区| 欧美日本视频在线| 国产精品日日摸夜夜摸av|