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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? x_tree.h

?? X-tree的C++源碼
?? H
?? 第 1 頁 / 共 5 頁
字號:
    // recalculate # of succeeders in the tree    entries[follow].num_of_data = succ->get_num_of_data();    if (ret == SPLIT)    // Einfuegen von d in Sohn hat zum Split des Sohns gefuehrt -->    // neuen Sohn *new_succ einfuegen    {        if (get_num() == capacity)     	    error("XTDataNode::insert: maximum capacity violation", TRUE);        // update split-history of old son	entries[follow].history = entries[follow].history | (1 << dimen);		// create and insert new entry        de = new DirEntry<DATA>(dimension, my_tree);	nmbr = new_succ->get_mbr();        memcpy(de->bounces, nmbr, 2*dimension*sizeof(float));	delete [] nmbr;        de->son = new_succ->block;        de->son_ptr = new_succ;        de->son_is_data = son_is_data;        de->num_of_data = new_succ->get_num_of_data();        	// set split-history of new son        de->history = entries[follow].history;        enter(de);        if (get_num() == (capacity - 1))        // Knoten laeuft ueber --> Split        // this happens already if the node is nearly filled        // for the algorithms are more easy then        {	    if (split(&brother, &dimen) == TRUE)	    {		*dim = dimen;		*sn = brother;		printf("splitting node %d, creating %d\n", block, (*sn)->block);		ret = SPLIT;	    }	    else	    {               // no split occured in son, but supernode was created	       delete sn;	       ret = SUPERNODE;	    }	}        else      	    ret = NONE;    }    // must write page    dirty = TRUE;    return ret;}template <class DATA> DATA * XTDirNode<DATA>::get(int i){    int j, n, sum;    XTNode<DATA> *sn;    n = get_num();    sum = 0;    for (j = 0; j < n; j++)    {        sum += entries[j].num_of_data;        if (sum > i)	// i-th object is behind this node --> follow son        {            sn = entries[j].get_son();            return sn->get(i - (sum - entries[j].num_of_data));        }    }    return NULL;}template <class DATA> void XTDirNode<DATA>::region(float *mbr){    int i, n;    SECTION s;    XTNode<DATA> *succ;    n = get_num();    for (i = 0; i < n; i++)    // teste alle Rechtecke auf Ueberschneidung    {        s = entries[i].section(mbr);        if (s == INSIDE || s == OVERLAP)        {            // Rechteck ist interessant --> rekursiv weiter            succ = entries[i].get_son();            succ->region(mbr);        }    }}template <class DATA> void XTDirNode<DATA>::point_query(float *p){    int i, n;    XTNode<DATA> *succ;    n = get_num();    for (i = 0; i < n; i++)    // teste alle Rechtecke auf Ueberschneidung    {	if (entries[i].is_inside(p))        {            // Rechteck ist interessant --> rekursiv weiter            succ = entries[i].get_son();            succ->point_query(p);        }    }}template <class DATA> void XTDirNode<DATA>::range_query(float *mbr, SortedLinList<DATA> *res){    int i, n;    SECTION s;    XTNode<DATA> *succ;#ifdef ZAEHLER    page_access += my_tree->node_weight[level];#endif    n = get_num();    for (i = 0; i < n; i++)    // teste alle Rechtecke auf Ueberschneidung    {        s = entries[i].section(mbr);        if (s == INSIDE || s == OVERLAP)        {            // Rechteck ist interessant --> rekursiv weiter            succ = entries[i].get_son();            succ->range_query(mbr,res);        }    }}template <class DATA> void XTDirNode<DATA>::range_query(DATA *center, float radius, 		SortedLinList<DATA> *res){    int i, n;    bool s;    XTNode<DATA> *succ;    #ifdef ZAEHLER	page_access += my_tree->node_weight[level];    #endif    n = get_num();    for (i = 0; i < n; i++)    // teste alle Rechtecke auf Ueberschneidung    {        s = entries[i].section_circle(center,radius);        if (s)        {            // Rechteck ist interessant --> rekursiv weiter            succ = entries[i].get_son();            succ->range_query(center,radius,res);        }    }}#ifdef S3template <class DATA> void XTDirNode<DATA>::neighbours(LinList<DATA> *sl,                                 float eps,                                 Result *rs,                                 norm_ptr norm){    int i, j;    DATA *s;    float *mbr;    XTNode<DATA> *succ;    mbr = new float[2*dimension];    for (i = 0; i < get_num(); i++)    {        for (s = sl->get_first(); s != NULL; s = sl->get_next())        {           for (j = 0; j < dimension; j++)           {               mbr[2*j] = s->data[j] - eps;               mbr[2*j+1] = s->data[j] + eps;           }           if (entries[i].section(mbr) != S_NONE)           {               // Rechteck ist interessant --> rekursiv weiter               succ = entries[i].get_son();               succ->neighbours(sl, eps, rs, norm);           }        }    }    delete [] mbr;}#endif // S3template <class DATA>void XTDirNode<DATA>::nearest_neighbour_search(DATA *QueryPoint, DATA *Nearest,				float *nearest_distanz){    float *minmax_distanz;		// Array fuer MINMAXDIST aller Eintraege    int *indexliste;		// Liste (for Sorting and Prunching)    int i,j,k,last,n;    float akt_min_dist;		// minimal distanz computed upto now     float minmaxdist,mindist;        BranchList *activebranchList;    #ifdef ZAEHLER    page_access += my_tree->node_weight[level];#endif        n = get_num();        activebranchList = new BranchList [n]; // Array erzeugen mit n Elementen        for( i = 0; i < n; i++)    {	activebranchList[i].entry_number = i;	activebranchList[i].minmaxdist = MINMAXDIST(QueryPoint,entries[i].bounces);	activebranchList[i].mindist = MINDIST(QueryPoint,entries[i].bounces);	    }	        // sort branchList    qsort(activebranchList,n,sizeof(BranchList),sort_min_dist);         // prune BrunchList    last = prune_branch_list(nearest_distanz,activebranchList,n);        for( i = 0; i < last; i++)    {	entries[activebranchList[i].entry_number].get_son()->nearest_neighbour_search(QueryPoint, Nearest, nearest_distanz); 		last = prune_branch_list(nearest_distanz,activebranchList,last);    }        delete [] activebranchList;}template <class DATA>void XTDirNode<DATA>::nearest_neighbour_search(DATA *QueryPoint, 				SortedLinList<DATA> *res,				float *nearest_distanz){    float *minmax_distanz;		// Array fuer MINMAXDIST aller Eintraege    int *indexliste;		// Liste (for Sorting and Prunching)    int i,j,k,last,n;    float akt_min_dist;		// minimal distanz computed upto now     float minmaxdist,mindist;        BranchList *activebranchList;    #ifdef ZAEHLER    page_access += my_tree->node_weight[level];#endif    n = get_num();        k = res->get_num(); 	// wird haben eine k-nearest-Narbor-Query        *nearest_distanz = res->get(k-1)->distanz;  // der aktuell letzte                                                 // naechste Nachbar wird                                                // versucht zu ersetzen.    activebranchList = new BranchList [n]; // Array erzeugen mit n Elementen     for( i = 0; i < n; i++)    {	activebranchList[i].entry_number = i;	activebranchList[i].minmaxdist = MINMAXDIST(QueryPoint,entries[i].bounces);	activebranchList[i].mindist = MINDIST(QueryPoint,entries[i].bounces);	    }	    // sort_branch_list    qsort(activebranchList,n,sizeof(BranchList),sort_min_dist);      // prune_branch_list    last = prune_branch_list(nearest_distanz,activebranchList,n);    for( i = 0; i < last; i++)    {	entries[activebranchList[i].entry_number].get_son()->nearest_neighbour_search(QueryPoint, res, nearest_distanz); 		last = prune_branch_list(nearest_distanz,activebranchList,last);    }    delete [] activebranchList;}template <class DATA>void XTDirNode<DATA>::overlapping(float *p, int *nodes_t){    int i, n;    XTNode<DATA> *succ;    // ein Knoten mehr besucht    nodes_t[level]++;    n = get_num();    for (i = 0; i < n; i++)    // teste alle Rechtecke auf Ueberschneidung    {        if (entries[i].is_inside(p))        {            // Rechteck ist interessant --> rekursiv weiter            succ = entries[i].get_son();            succ->overlapping(p, nodes_t);        }    }}template <class DATA>void XTDirNode<DATA>::nodes(int *nodes_a){    int i, n;    XTNode<DATA> *succ;    // ein Knoten mehr besucht    nodes_a[level]++;    n = get_num();    for (i = 0; i < n; i++)    // teste alle Rechtecke auf Ueberschneidung    {	succ = entries[i].get_son();	succ->nodes(nodes_a);    }}template <class DATA> void XTDirNode<DATA>::write_info(FILE *f){    int i,j,n;    float *mbr;    mbr = get_mbr();    fprintf(f,"%d\n",level+1);    fprintf(f,"move %f %f\n",mbr[0],mbr[2]);    fprintf(f,"draw %f %f\n",mbr[1],mbr[2]);    fprintf(f,"draw %f %f\n",mbr[1],mbr[3]);    fprintf(f,"draw %f %f\n",mbr[0],mbr[3]);    fprintf(f,"draw %f %f\n",mbr[0],mbr[2]);    fprintf(f,"\n");    delete [] mbr;    n = get_num();    for( i = 0; i < n ; i++)	entries[i].get_son()->write_info(f);}//////////////////////////////////////////////////////////////////////////////// XTDataNode//////////////////////////////////////////////////////////////////////////////template <class DATA> XTDataNode<DATA>::XTDataNode(XTree<DATA> *rt)    : XTNode<DATA>(rt)// zugehoeriger Plattenblock muss erst erzeugt werden{    int header_size;    DATA * d;    level = 0;    // mal kurz einen Dateneintrag erzeugen und schauen, wie gross der wird..    d = new DATA(&dimension);    // von der Blocklaenge geht die Headergroesse ab    header_size = sizeof(char) + sizeof(int);    capacity = (rt->file->get_blocklength() - header_size) / d->get_size();    delete d;    // Eintraege erzeugen; das geht mit einem Trick, da C++ beim     // Initialisieren von Objektarrays nur Defaultkonstruktoren kapiert.    // Daher wird ueber statische Variablen die Information uebergeben.    XTDataNode__dimension = dimension;    data = new DATA[capacity];    // neuen Plattenblock an File anhaengen    block = rt->file->append_block(rt->block_buffer);    rt->num_of_dnodes ++;    // Plattenblock muss auf jeden Fall neu geschrieben werden    dirty = TRUE;}template <class DATA> XTDataNode<DATA>::XTDataNode(XTree<DATA> *rt, int _block)    : XTNode<DATA>(rt)// zugehoeriger Plattenblock existiert schon{    int header_size;    DATA *d;    // mal kurz einen Dateneintrag erzeugen und schauen, wie gross der wird..    d = new DATA(&dimension);    // von der Blocklaenge geht die Headergroesse ab    header_size = sizeof(char) + sizeof(int);    capacity = (rt->file->get_blocklength() - header_size) / d->get_size();    delete d;    // Eintraege erzeugen; das geht mit einem Trick, da C++ beim     // Initialisieren von Objektarrays nur Defaultkonstruktoren kapiert.    // Daher wird ueber statische Variablen die Information uebergeben.    XTDataNode__dimension = dimension;    data = new 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    block = _block;    rt->file->read_block(rt->block_buffer, block);    read_from_buffer(rt->block_buffer);    // Plattenblock muss vorerst nicht geschrieben werden    dirty = FALSE;}template <class DATA> XTDataNode<DATA>::~XTDataNode(){    if (dirty)    {	// Daten auf zugehoerigen Plattenblock schreiben	write_to_buffer(my_tree->block_buffer);	my_tree->file->write_block(my_tree->block_buffer, block);    }    delete [] data;}template <class DATA> void XTDataNode<DATA>::read_from_buffer(char *buffer){    int i, j, s;    // Level des Knotens lesen    memcpy(&level, buffer, sizeof(char));    j = sizeof(char);///////////////////////////////////////////////////////////    // da das Abspeichern des levels voellig ueberfluessig ist    // und level manchmal falsch in den Dateien steht, dieser HACK:    level = 0;///////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级高清大全免费观看| 日本精品一区二区三区高清| 91福利资源站| 亚洲老妇xxxxxx| 视频一区欧美精品| 久色婷婷小香蕉久久| 久久伊人蜜桃av一区二区| 亚洲精品在线观| 中文字幕在线观看不卡| 亚洲欧美一区二区在线观看| 亚洲大片在线观看| 精品久久久久久久久久久久久久久 | 亚洲另类春色国产| 成人一区二区在线观看| 久久精品人人做人人爽人人| 日本伊人午夜精品| 亚洲成人在线免费| 亚洲精品中文在线影院| www.日本不卡| 免费观看成人鲁鲁鲁鲁鲁视频| 久久久www免费人成精品| 欧美巨大另类极品videosbest| 国产在线不卡视频| 麻豆91小视频| 久久福利视频一区二区| 婷婷久久综合九色国产成人| 亚洲欧美日韩在线| 亚洲精品美国一| 亚洲欧美偷拍卡通变态| 国产精品久久毛片a| 91精品国产色综合久久不卡电影| 91久久一区二区| 欧美午夜在线观看| 欧美伊人久久久久久午夜久久久久| 成人爽a毛片一区二区免费| 处破女av一区二区| 一本到一区二区三区| 欧美日韩亚洲另类| 91在线视频观看| 欧美性受xxxx| 91精品国产综合久久精品app| 欧美另类z0zxhd电影| 欧美视频一区在线| 精品精品国产高清a毛片牛牛 | 欧美日韩在线播放一区| 亚洲精品视频在线| 日韩av午夜在线观看| 精品亚洲porn| 色吊一区二区三区| 亚洲精品在线观| 亚洲精品国产品国语在线app| 亚洲夂夂婷婷色拍ww47| 精品在线免费观看| 欧美精品久久久久久久多人混战| 国产精品无圣光一区二区| 欧美剧情电影在线观看完整版免费励志电影| 欧美精三区欧美精三区| 国产午夜精品美女毛片视频| 亚洲电影你懂得| 日本道色综合久久| 亚洲人成伊人成综合网小说| 国产高清亚洲一区| 日韩写真欧美这视频| 日韩午夜中文字幕| 尤物在线观看一区| 99麻豆久久久国产精品免费优播| 欧美成人一区二区三区片免费| 亚洲色图欧美偷拍| 91电影在线观看| 1024亚洲合集| 欧美日韩在线精品一区二区三区激情| 久久久另类综合| 在线精品观看国产| 久久久精品国产99久久精品芒果| 亚洲国产成人av网| 欧美三片在线视频观看| 亚洲一区二区不卡免费| 欧美人xxxx| 青青草成人在线观看| 日韩色视频在线观看| 狠狠网亚洲精品| 中文字幕日韩一区二区| 国产精品久久久爽爽爽麻豆色哟哟| 国产精品理论片在线观看| eeuss鲁一区二区三区| 亚洲人快播电影网| 精品国产99国产精品| 不卡的电视剧免费网站有什么| 亚洲精品中文字幕乱码三区| 久久亚洲综合av| 99在线视频精品| 26uuu色噜噜精品一区二区| 一区二区三区久久| 久久精品一区二区三区av| 99久久er热在这里只有精品15| 婷婷丁香久久五月婷婷| 国产精品麻豆久久久| 欧美一级淫片007| 色噜噜狠狠一区二区三区果冻| 久久国产精品色| 欧美精品一区二区不卡 | 国产精品色噜噜| 欧美一区二区精品久久911| 欧美在线免费播放| 不卡的av网站| 成人一区在线看| 99久久久无码国产精品| 国产在线播放一区三区四| 粉嫩aⅴ一区二区三区四区 | 成人av第一页| 国产成人免费视频网站 | 成人福利电影精品一区二区在线观看 | 精品免费一区二区三区| 三级欧美在线一区| 奇米影视在线99精品| 日本美女视频一区二区| 久99久精品视频免费观看| 激情欧美一区二区三区在线观看| 奇米色一区二区三区四区| 国产一区欧美二区| 成人高清视频在线观看| 精品国产髙清在线看国产毛片| 国内精品写真在线观看| 亚洲激情第一区| 亚洲成年人网站在线观看| 蜜臀av一区二区在线免费观看 | 91麻豆成人久久精品二区三区| 91国偷自产一区二区开放时间 | 日韩欧美一区在线| 亚洲私人影院在线观看| 欧美zozo另类异族| 亚洲日本韩国一区| 极品少妇一区二区| 99综合电影在线视频| 欧美一区2区视频在线观看| 久久夜色精品国产欧美乱极品| 国产精品久久毛片av大全日韩| 亚洲成av人片在www色猫咪| av在线这里只有精品| 成人欧美一区二区三区1314| 欧美日韩成人在线| 大美女一区二区三区| 一本到一区二区三区| 欧美日韩一级视频| 国产精品你懂的在线欣赏| 国产精品国产三级国产aⅴ无密码| 亚洲精品中文字幕乱码三区| 一本一本久久a久久精品综合麻豆| 国产精品久久久久久久久免费丝袜 | 日本高清不卡视频| 五月婷婷欧美视频| 久久精品亚洲精品国产欧美| 成人精品小蝌蚪| 亚洲国产人成综合网站| 日韩免费一区二区| 97久久精品人人爽人人爽蜜臀| 最新国产成人在线观看| 欧美片在线播放| 国产精品影视天天线| 亚洲日本va在线观看| 欧美一区中文字幕| 成人不卡免费av| 久久av中文字幕片| 亚洲一区二区三区四区五区中文 | 国产精品国产三级国产有无不卡 | 亚洲一级二级在线| 久久综合九色综合欧美98| 在线亚洲一区观看| 国产精选一区二区三区| 午夜精品视频一区| 成人欧美一区二区三区视频网页 | 日本不卡视频在线| 午夜日韩在线观看| 午夜不卡av在线| 国产欧美一二三区| 日韩免费看的电影| 在线欧美一区二区| 国产精品18久久久久久久久久久久| 久久久久久久电影| 奇米精品一区二区三区四区| 久久久99久久| 欧美日韩亚洲丝袜制服| 国产成人精品一区二区三区四区 | 国产日本欧美一区二区| 成人av在线一区二区三区| 99久久婷婷国产综合精品电影| 91在线小视频| 一本久久综合亚洲鲁鲁五月天| 欧洲精品一区二区| 日韩欧美国产电影| 亚洲精品国产无套在线观| 日本va欧美va欧美va精品| 高清免费成人av| 欧美女孩性生活视频| 久久久99精品久久| 日本美女一区二区三区视频| 久久精品国产网站| 免费观看一级欧美片| 精品一区在线看| 国产成人无遮挡在线视频|