RID IndexScan::LeSearch(){ if(position.size() == 0) return RID(-1,-1); int num = position.back(); Node n; index_.getNode(current, n); RID res = n.n[num]; while(n.k[num] > value_){ canDo = toLeft(); if(canDo) { num = position.back(); index_.getNode(current, n); res = n.n[num]; } else return RID(-1,-1); } canDo = toLeft(); return res; }
void HTree::getSizeThings(QByteArray code) { my_fileCode = code; for(int i = 0; i < 24; i++){ if(i <= 2){ if(getBit(i)){ s_Trash += 0x1 << (2-i); } } else if(i <= 15){ if(getBit(i)){ s_Tree += 0x1 << (15-i); } } else{ if(getBit(i)){ s_Name += 0x1 << (23-i); } } } for(int i = 3; i < 3 + s_Name; i++){ my_fileName += (unsigned char)my_fileCode.at(i); } for(int i = 3 + s_Name; i < 3 + s_Name + s_Tree; i++){ my_treeCode.append((unsigned char)my_fileCode.at(i)); } my_fileCode.remove(0,3+s_Name+s_Tree); setRoot(rebuildTree(this->my_treeCode)); m_cursor = m_root; for(long long int i = 0; i < (long long int)((my_fileCode.size()*8) - s_Trash); i++){ if(getBit(i)){ toRight(); } else{ toLeft(); } if(m_cursor->isLeaf()){ my_finalOutPut += (unsigned char)m_cursor->content; m_cursor = m_root; } } }
Graph* mesh2Graph(const Mesh &mesh, const p2t::Point &p, int splitedEdgeLablesCount, int basePolygonPointsCount, PointArray &new_pa, IntArray &pla, bool *polygonEdge, AdjListNode *nodeMemPool) { Graph *graph = new Graph(splitedEdgeLablesCount); memset(polygonEdge, false, splitedEdgeLablesCount * sizeof(bool)); Point *temp = new Point[2 * splitedEdgeLablesCount]; AdjListNode *nodeMemPoolIndex = nodeMemPool; Mesh::const_iterator it; for (it = mesh.begin(); it != mesh.end(); ++it) { bool unlabeled_edge = false; for (int i = 0; i < 3; i++) if ((*it)->edges[i] == -1) { unlabeled_edge = true; break; } if (unlabeled_edge) continue; const p2t::Point *p1 = (*it)->GetPoint(0); const p2t::Point *p2 = (*it)->GetPoint(1); const p2t::Point *p3 = (*it)->GetPoint(2); double sign1 = toLeft(p, *p2, *p3); double sign2 = toLeft(p, *p3, *p1); double sign3 = toLeft(p, *p1, *p2); //R1,R2,R3 if (sign1 > 0 && sign2 < 0 && sign3 < 0) { graph->addEdge((*it)->edges[1], (*it)->edges[0], nodeMemPoolIndex++); graph->addEdge((*it)->edges[2], (*it)->edges[0], nodeMemPoolIndex++); } if (sign2 > 0 && sign1 < 0 && sign3 < 0) { graph->addEdge((*it)->edges[0], (*it)->edges[1], nodeMemPoolIndex++); graph->addEdge((*it)->edges[2], (*it)->edges[1], nodeMemPoolIndex++); } if (sign3 > 0 && sign1 < 0 && sign2 < 0) { graph->addEdge((*it)->edges[1], (*it)->edges[2], nodeMemPoolIndex++); graph->addEdge((*it)->edges[0], (*it)->edges[2], nodeMemPoolIndex++); } //~R1,~R2,~R3 if (sign1 < 0 && sign2 > 0 && sign3 > 0) { graph->addEdge((*it)->edges[0], (*it)->edges[1], nodeMemPoolIndex++); graph->addEdge((*it)->edges[0], (*it)->edges[2], nodeMemPoolIndex++); } if (sign2 < 0 && sign1 > 0 && sign3 > 0) { graph->addEdge((*it)->edges[1], (*it)->edges[0], nodeMemPoolIndex++); graph->addEdge((*it)->edges[1], (*it)->edges[2], nodeMemPoolIndex++); } if (sign3 < 0 && sign1 > 0 && sign2 > 0) { graph->addEdge((*it)->edges[2], (*it)->edges[1], nodeMemPoolIndex++); graph->addEdge((*it)->edges[2], (*it)->edges[0], nodeMemPoolIndex++); } //l21,l31,l12,l13,l32,l23 if (sign1 == 0 && sign2 < 0) graph->addEdge((*it)->edges[1], (*it)->edges[2], nodeMemPoolIndex++); if (sign2 == 0 && sign1 < 0) graph->addEdge((*it)->edges[0], (*it)->edges[2], nodeMemPoolIndex++); if (sign3 == 0 && sign1 < 0) graph->addEdge((*it)->edges[0], (*it)->edges[1], nodeMemPoolIndex++); if (sign1 == 0 && sign3 < 0) graph->addEdge((*it)->edges[2], (*it)->edges[1], nodeMemPoolIndex++); if (sign2 == 0 && sign3 < 0) graph->addEdge((*it)->edges[2], (*it)->edges[0], nodeMemPoolIndex++); if (sign3 == 0 && sign2 < 0) graph->addEdge((*it)->edges[1], (*it)->edges[0], nodeMemPoolIndex++); pla[2 * (*it)->edges[0]] = p2->pointLabel; pla[2 * (*it)->edges[0] + 1] = p3->pointLabel; temp[2 * (*it)->edges[0]] = Point(p2->x, p2->y); temp[2 * (*it)->edges[0] + 1] = Point(p3->x, p3->y); polygonEdge[(*it)->edges[0]] = (*it)->polygon_edge[0]; pla[2 * (*it)->edges[1]] = p3->pointLabel; pla[2 * (*it)->edges[1] + 1] = p1->pointLabel; temp[2 * (*it)->edges[1]] = Point(p3->x, p3->y); temp[2 * (*it)->edges[1] + 1] = Point(p1->x, p1->y); polygonEdge[(*it)->edges[1]] = (*it)->polygon_edge[1]; pla[2 * (*it)->edges[2]] = p1->pointLabel; pla[2 * (*it)->edges[2] + 1] = p2->pointLabel; temp[2 * (*it)->edges[2]] = Point(p1->x, p1->y); temp[2 * (*it)->edges[2] + 1] = Point(p2->x, p2->y); polygonEdge[(*it)->edges[2]] = (*it)->polygon_edge[2]; } for (int i = 0; i < 2 * splitedEdgeLablesCount; i++) if (polygonEdge[i / 2] && pla[i] == -1) { pla[i] = basePolygonPointsCount++; new_pa.push_back(temp[i]); } delete[] temp; return graph; }