Exemple #1
0
 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;
 }
Exemple #2
0
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;
}