int CBUtils::getuiClearRegion(hwc_display_contents_1_t* list,
          hwc_rect_t &clearWormholeRect, LayerProp *layerProp) {

    size_t last = list->numHwLayers - 1;
    hwc_rect_t fbFrame = list->hwLayers[last].displayFrame;
    Rect fbFrameRect(fbFrame.left,fbFrame.top,fbFrame.right,fbFrame.bottom);
    Region wormholeRegion(fbFrameRect);

    if(cb_swap_rect::getInstance().checkSwapRectFeature_on() == true){
      wormholeRegion.set(0,0);
      for(size_t i = 0 ; i < last; i++) {
         if(((list->hwLayers[i].blending == HWC_BLENDING_NONE) &&
           (list->hwLayers[i].planeAlpha == 0xFF)) ||
           !(layerProp[i].mFlags & HWC_COPYBIT) ||
           (list->hwLayers[i].flags  & HWC_SKIP_HWC_COMPOSITION))
              continue ;
         hwc_rect_t displayFrame = list->hwLayers[i].displayFrame;
         Rect tmpRect(displayFrame.left,displayFrame.top,
                      displayFrame.right,displayFrame.bottom);
         wormholeRegion.set(tmpRect);
      }
   }else{
     for (size_t i = 0 ; i < last; i++) {
        // need to take care only in per pixel blending.
        // Restrict calculation only for copybit layers.
        if((list->hwLayers[i].blending != HWC_BLENDING_NONE) ||
           (list->hwLayers[i].planeAlpha != 0xFF) ||
           !(layerProp[i].mFlags & HWC_COPYBIT))
            continue ;
        hwc_rect_t displayFrame = list->hwLayers[i].displayFrame;
        Rect tmpRect(displayFrame.left,displayFrame.top,displayFrame.right,
        displayFrame.bottom);
        Region tmpRegion(tmpRect);
        wormholeRegion.subtractSelf(wormholeRegion.intersect(tmpRegion));
     }
   }
   if(wormholeRegion.isEmpty()){
        return 0;
   }
   //TO DO :- 1. remove union and call clear for each rect.
   Region::const_iterator it = wormholeRegion.begin();
   Region::const_iterator const end = wormholeRegion.end();
   while (it != end) {
       const Rect& r = *it++;
       hwc_rect_t tmpWormRect = {r.left,r.top,r.right,r.bottom};
       int dst_w =  clearWormholeRect.right -  clearWormholeRect.left;
       int dst_h =  clearWormholeRect.bottom -  clearWormholeRect.top;

       if (!(dst_w || dst_h))
             clearWormholeRect = tmpWormRect;
       else
             getUnion(clearWormholeRect, tmpWormRect, clearWormholeRect);

   }
   return 1;
}
Beispiel #2
0
PvObject PvObject::selectUnionField(const std::string& key, const std::string& fieldName) const
{
    epics::pvData::PVUnionPtr pvUnionPtr = PyPvDataUtility::getUnionField(key, pvStructurePtr);
    try {
        epics::pvData::PVFieldPtr pvField = pvUnionPtr->select(fieldName);
    } 
    catch (std::runtime_error e) {
        throw FieldNotFound("Unknown field name: %s", fieldName.c_str());
    }
    return getUnion(key);
}
Beispiel #3
0
void main()
{
	data * start1, *start2, *startUnion;
	puts("\n Enter data in first link list.");
	start1 = create();
	puts("\n Enter data in second link list.");
	start2 = create();
	
	puts("\n First List:");
	displayList(start1);
	puts("\n Second List:");
	displayList(start2);
	startUnion = getUnion(start1, start2);
	puts("\n Union:");
	displayList(startUnion);
	getch();
}
void evaluar()
{
    int nota = 0;

    cout<<"Ejercicio agregarASet:\t\t\t";
    set<int>s;
    agregarASet(&s,2);
    agregarASet(&s,5);

    set<int>s2;

    if( (*s.find(2)) == 2 && (*s.find(5)) == 5)
    {
        nota++;
        cout<<"Correcto"<<endl;
    }else
    {
        cout<<"Incorrecto"<<endl;
    }

    set<int>sa;
    set<int>sb;
    sa.insert(2);
    sa.insert(4);
    sa.insert(5);
    sa.insert(6);
    sa.insert(8);

    sb.insert(1);
    sb.insert(2);
    sb.insert(3);
    sb.insert(4);
    sb.insert(5);
    sb.insert(6);

    cout<<"Ejercicio existe:\t\t\t";

    if(existe(sa,2) && !existe(sa,1) && existe(sb,1) && existe(sa,6) && !existe(sb,7))
    {
        nota++;
        cout<<"Correcto"<<endl;
    }else
    {
        cout<<"Incorrecto"<<endl;
    }

    cout<<"Ejercicio tamano:\t\t\t";

    if(tamano(sa)==5 && tamano(sb)==6)
    {
        nota++;
        cout<<"Correcto"<<endl;
    }else
    {
        cout<<"Incorrecto"<<endl;
    }

    cout<<"Ejercicio getInserseccion:\t\t";

    set<int> sc = getInserseccion(sa,sb);
    if(sc.find(1)==sc.end() &&
        sc.find(2)!=sc.end() &&
        sc.find(3)==sc.end() &&
        sc.find(4)!=sc.end() &&
        sc.find(5)!=sc.end() &&
        sc.find(6)!=sc.end() &&
        sc.find(7)==sc.end() &&
        sc.find(8)==sc.end() &&
        sc.find(9)==sc.end() &&
        sc.find(10)==sc.end() &&
        sc.find(0)==sc.end())
    {
        nota++;
        cout<<"Correcto"<<endl;
    }else
    {
        cout<<"Incorrecto"<<endl;
    }



    cout<<"Ejercicio getUnion:\t\t\t";

    set<int> sd = getUnion(sa,sb);

    if(sd.find(1)!=sd.end() &&
        sd.find(2)!=sd.end() &&
        sd.find(3)!=sd.end() &&
        sd.find(4)!=sd.end() &&
        sd.find(5)!=sd.end() &&
        sd.find(6)!=sd.end() &&
        sd.find(7)==sd.end() &&
        sd.find(8)!=sd.end() &&
        sd.find(9)==sd.end() &&
        sd.find(10)==sd.end() &&
        sd.find(0)==sd.end()
        )
    {
        nota++;
        cout<<"Correcto"<<endl;
    }else
    {
        cout<<"Incorrecto"<<endl;
    }

    cout<<"Ejercicio esSubConjunto:\t\t";

    set<int> se;
    set<int> sf;

    se.insert(2);
    se.insert(4);
    se.insert(8);

    if(esSubConjunto(sa,se))
    {
        nota+=2;
        cout<<"Correcto"<<endl;
    }else
    {
        cout<<"Incorrecto"<<endl;
    }



//
    cout<<endl<<"Nota: "<<nota<<"/7"<<endl;
}
Beispiel #5
0
PvObject PvObject::getUnion() const
{
    std::string key = PyPvDataUtility::getValueOrSingleFieldName(pvStructurePtr);
    return getUnion(key);
}
Beispiel #6
0
void evaluar()
{
    int nota = 0;

    cout<<"Ejercicio asignarValor:\t\t\t";
    map<string,int>m;
    asignarValor(&m,"A",1);
    asignarValor(&m,"B",2);
    asignarValor(&m,"C",3);

    //set<int>s2;

    if( m["A"]==1 && m["B"]==2 && m["C"]==3)
    {
        nota++;
        cout<<"Correcto"<<endl;
    }else
    {
        cout<<"Incorrecto"<<endl;
    }

    set<int>sa;
    set<int>sb;
    sa.insert(2);
    sa.insert(4);
    sa.insert(5);
    sa.insert(6);
    sa.insert(8);

    sb.insert(1);
    sb.insert(2);
    sb.insert(3);
    sb.insert(4);
    sb.insert(5);
    sb.insert(6);

    cout<<"Ejercicio obtenerValor:\t\t\t";

    map<int,char> m2;
    m2[10] = 'x';
    m2[20] = 'y';
    m2[30] = 'z';

    map<int,char> m3;
    m3[10] = 'a';

    if(obtenerValor(m2,10) == 'x'
    && obtenerValor(m2,20) == 'y'
    && obtenerValor(m2,30) == 'z'
    && obtenerValor(m3,10) == 'a')
    {
        nota++;
        cout<<"Correcto"<<endl;
    }else
    {
        cout<<"Incorrecto"<<endl;
    }

    cout<<"Ejercicio obtenerSemana:\t\t";

    if(obtenerSemana()["lunes"]==1
    && obtenerSemana()["martes"]==2
    && obtenerSemana()["miercoles"]==3
    && obtenerSemana()["jueves"]==4
    && obtenerSemana()["viernes"]==5
    && obtenerSemana()["sabado"]==6
    && obtenerSemana()["domingo"]==7)
    {
        nota++;
        cout<<"Correcto"<<endl;
    }else
    {
        cout<<"Incorrecto"<<endl;
    }

    cout<<"Ejercicio getInserseccion:\t\t";

    set<int> sc = getInserseccion(sa,sb);
    if(sc.find(1)==sc.end() &&
        sc.find(2)!=sc.end() &&
        sc.find(3)==sc.end() &&
        sc.find(4)!=sc.end() &&
        sc.find(5)!=sc.end() &&
        sc.find(6)!=sc.end() &&
        sc.find(7)==sc.end() &&
        sc.find(8)==sc.end() &&
        sc.find(9)==sc.end() &&
        sc.find(10)==sc.end() &&
        sc.find(0)==sc.end())
    {
        nota++;
        cout<<"Correcto"<<endl;
    }else
    {
        cout<<"Incorrecto"<<endl;
    }



    cout<<"Ejercicio getUnion:\t\t\t";

    set<int> sd = getUnion(sa,sb);

    if(sd.find(1)!=sd.end() &&
        sd.find(2)!=sd.end() &&
        sd.find(3)!=sd.end() &&
        sd.find(4)!=sd.end() &&
        sd.find(5)!=sd.end() &&
        sd.find(6)!=sd.end() &&
        sd.find(7)==sd.end() &&
        sd.find(8)!=sd.end() &&
        sd.find(9)==sd.end() &&
        sd.find(10)==sd.end() &&
        sd.find(0)==sd.end()
        )
    {
        nota++;
        cout<<"Correcto"<<endl;
    }else
    {
        cout<<"Incorrecto"<<endl;
    }

    cout<<"Ejercicio esSubConjunto:\t\t";

    set<int> se;
    set<int> sf;

    se.insert(2);
    se.insert(4);
    se.insert(8);

    if(esSubConjunto(sa,se))
    {
        nota+=2;
        cout<<"Correcto"<<endl;
    }else
    {
        cout<<"Incorrecto"<<endl;
    }



//
    cout<<endl<<"Nota: "<<nota<<"/7"<<endl;
}
int * PlaceJoueur::placeJoueur(int ** carte, int largeur,int hauteur, int* peuple, int nbJoueurs)
{

	vector< vector<Coordonnees> > tabZones;
	for(int i=0;i<nbJoueurs;i++)
	{
		vector<Coordonnees> tmp = findZone(carte,largeur,hauteur,peuple[i]);
		tabZones.push_back(tmp);
	}

	vector<Coordonnees> zoneAccessible = getUnion(tabZones);
	
	int * coord = new int[2*nbJoueurs];

	Coordonnees coordJ1, coordJ2;
	int max=0;
	
	AStar * star = new AStar();
	vector<Coordonnees>::iterator it = zoneAccessible.begin();
	for(;it!=zoneAccessible.end();it++)
	{
		vector<Coordonnees>::iterator it2 = zoneAccessible.begin();
		for(;it2!=zoneAccessible.end();it2++)
		{
			if (!(*it==*it2))
			{
				if (verif[peuple[0]][carte[(*it).x()][(*it).y()]])
				{
					vector<Node*>* res = star->pathFinding(tabToVecor(carte,largeur,hauteur),peuple[0],largeur,hauteur,(*it),(*it2));
					if (res->size()>max)
					{
						max=res->size();
						coordJ1 = (*it);
						coordJ2 = (*it2);
					}
				}
			}
		}
	}
	
	coord[0]=coordJ1.x();
	coord[1]=coordJ1.y();
	coord[2] = coordJ2.x();
	coord[3] = coordJ2.y();
	
	Coordonnees coordJ3;

	if (nbJoueurs>=3)
	{
		bool ok = false;
		int sigmaRef = 2;
		while (!ok)
		{
			double max=0;
			vector<Coordonnees>::iterator it = zoneAccessible.begin();
			for(;it!=zoneAccessible.end();it++)
			{
				if (!((*it) == coordJ1 || (*it) == coordJ2))
				{
					if (verif[peuple[2]][carte[(*it).x()][(*it).y()]])
					{
						vector<Node*>* res = star->pathFinding(tabToVecor(carte,largeur,hauteur),peuple[2],largeur,hauteur,(*it),(coordJ1));
						vector<Node*>* res2 = star->pathFinding(tabToVecor(carte,largeur,hauteur),peuple[2],largeur,hauteur,(*it),(coordJ2));
						if (std::abs((int)res->size()-(int)res2->size())<=2 && (res->size()+res2->size())/2>max)
						{
							max=(res->size()+res2->size())/2;
							coordJ3 = (*it);
							ok = true;
						}
					}
				}
			}
			sigmaRef++;
		}
		coord[4] = coordJ3.x();
		coord[5] = coordJ3.y();


		if (nbJoueurs==4)
		{
			Coordonnees coordJ4;
			bool ok = false;
			int sigmaRef = 3;
			while (!ok)
			{
				double max=0;
				vector<Coordonnees>::iterator it = zoneAccessible.begin();
				for(;it!=zoneAccessible.end();it++)
				{
					if (!((*it) == coordJ1 || (*it) == coordJ2 || (*it) == coordJ3))
					{
						if (verif[peuple[3]][carte[(*it).x()][(*it).y()]])
						{
							vector<Node*>* res = star->pathFinding(tabToVecor(carte,largeur,hauteur),peuple[3],largeur,hauteur,(*it),(coordJ1));
							vector<Node*>* res2 = star->pathFinding(tabToVecor(carte,largeur,hauteur),peuple[3],largeur,hauteur,(*it),(coordJ2));
							vector<Node*>* res3 = star->pathFinding(tabToVecor(carte,largeur,hauteur),peuple[3],largeur,hauteur,(*it),(coordJ3));
							int sigtmp1 = std::abs((int)res->size()-(int)res2->size());
							int sigtmp2 = std::abs((int)res2->size()-(int)res3->size());
							int sigtmp3 = std::abs((int)res->size()-(int)res3->size());
							if ((sigtmp1+sigtmp2+sigtmp3)/3<=sigmaRef && (res->size()+res2->size()+res3->size())/3>max)
							{
								max=(res->size()+res2->size()+res3->size())/3;
								coordJ4 = (*it);
								ok = true;
							}
						}
					}
				}
				sigmaRef++;
			}
			coord[6] = coordJ4.x();
			coord[7] = coordJ4.y();
		}
	}

	delete star;
	
	/*
	int nbJoueur = compteJoueurs(tabJoueurs,largeur,hauteur);

	srand (time(NULL));
	int * coord = new int[2];
	if (nbJoueur==0)
	{
		coord[0]=rand()%2*(largeur-1);
		coord[1]=rand()%2*(hauteur-1);
		int * coord2 = new int[2];
		coord2[0] = (((largeur-1)-coord[0])/4)*4;
		coord2[1] = (((hauteur-1)-coord[1])/4)*4;

		AStar * star = new AStar();
		vector<Node*>* res = star->pathFinding(tabToVecor(carte,largeur,hauteur),peuple,largeur,hauteur,Coordonnees(coord[0],coord[1]),Coordonnees(coord2[0],coord2[1]));
		delete star;
		coord[0]=res->back()->getCoord().x();
		coord[1]=res->back()->getCoord().y();
		delete res;

	}
	else if(nbJoueur==1)
	{
		coord = getCoordJoueur1(tabJoueurs,largeur,hauteur);
		int * coord2 = new int[2];
		coord2[0] = (((largeur-1)-coord[0])/4)*4;
		coord2[1] = (((hauteur-1)-coord[1])/4)*4;
		
		AStar * star = new AStar();
		vector<Node*>* res = star->pathFinding(tabToVecor(carte,largeur,hauteur),peuple,largeur,hauteur,Coordonnees(coord[0],coord[1]),Coordonnees(coord2[0],coord2[1]));
		delete star;
		coord[0]=res->back()->getCoord().x();
		coord[1]=res->back()->getCoord().y();
		delete res;

	}
	else
	{
		do
		{
			coord[0]=rand()%2*(largeur-1);
			coord[1]=rand()%2*(hauteur-1);
		} 
		while (tabJoueurs[coord[0]][coord[1]]!=0);
	}
	*/

	return coord;
}