示例#1
0
void shared_ptrExample(){
    std::cout << "Shared Pointer:" << std::endl;
    std::list<std::shared_ptr<message>> l1;
    std::list<std::shared_ptr<message>> l2;
    std::cout << "Creamos Mensaje 1" << std::endl;
    std::shared_ptr<message> spt(new message("Mensaje 1"));
    std::cout << "Referencias del Puntero Compartido: " << spt.use_count() << std::endl;
    std::cout << "Añadimos Mensaje 1 al final de la lista." << std::endl;
    l1.push_back(spt);
    std::cout << "Mensaje 1 Añadido." << std::endl;
    std::cout << "Referencias del Puntero Compartido: " << spt.use_count() << std::endl;
    std::cout << "Obtenemos mensaje" << std::endl;
    std::shared_ptr<message> tmp2;
    for(auto& tmp1 : l1){
        if(tmp1->getString()=="Mensaje 1"){
            tmp2 = tmp1;
        }
    }
    std::cout << "mensaje obtenido " << tmp2->getString() << std::endl;
    std::cout << "Referencias del Puntero Compartido: " << tmp2.use_count() << std::endl;
    {
        std::cout << "Entramos otro Scope" << std::endl;
            std::shared_ptr<message> spt2(new message("Mensaje 2"));
            std::shared_ptr<message> spt3(new message("Mensaje 3"));
            std::cout << "Añadimos Mensaje 2 al frente de la lista." << std::endl;
            l1.push_front(spt2);
            std::cout << "Referencias del Puntero Compartido: " << spt2.use_count() << std::endl;
        std::cout << "Salimos Otro Scope" << std::endl;
    }
    std::cout << "Referencias del Puntero Compartido: " << spt.use_count() << std::endl;
    std::cout << "Process Function Call" << std::endl;
    processMessageSPTR(l1.front());
    std::cout << "Process Function End" << std::endl;
    {
        std::cout << "Copy Message 2" << std::endl;
        std::shared_ptr<message> spt2(l1.front());
        std::cout << "Borramos message 2" << std::endl;
        l1.erase(l1.begin());
        std::cout << "Message 2 Borrado" << std::endl;
        std::cout << "Referencias del Puntero Compartido: " << spt2.use_count() << std::endl;
        std::cout << "Contenido MSG 2 " << spt2->getString() << std::endl;
        std::cout << "añadimos MSG2 a l2 " << std::endl;
        l2.push_back(spt2);
        std::cout << "Referencias del Puntero Compartido: " << spt.use_count() << std::endl;
    }
    std::cout << "Obtenemos Mensaje Lista 2 " << l2.front()->getString() << std::endl;
    std::cout << "Referencias del Puntero Compartido: " << l2.front().use_count() << std::endl;
    std::cout << "Salimos Programa." << std::endl;
}
示例#2
0
void unique_ptrExample(){
    std::cout << "Unique Pointer " << std::endl;
    std::list<std::unique_ptr<message>> l1;
    std::list<std::unique_ptr<message>> l2;
    std::cout << "Creamos Mensaje 1" << std::endl;
    std::unique_ptr<message> spt(new message("Mensaje 1"));
    std::cout << "Añadimos Mensaje 1 al final de la lista." << std::endl;
    l1.push_back(std::move(spt));
    std::cout << "Mensaje 1 Añadido." << std::endl;
    std::cout << "Obtenemos mensaje" << std::endl;
    std::unique_ptr<message> tmp2;
    for(auto& tmp1 : l1){
        if(tmp1->getString()=="Mensaje 1"){
            tmp2 = std::move(tmp1);
        }
    }
    std::cout << "mensaje obtenido " << tmp2->getString() << std::endl;
    {
        std::cout << "Entramos otro Scope" << std::endl;
            std::unique_ptr<message> spt2(new message("Mensaje 2"));
            std::unique_ptr<message> spt3(new message("Mensaje 3"));
            spt2 == spt3;
            std::cout << "Añadimos Mensaje 2 al frente de la lista." << std::endl;
            l1.push_front(std::move(spt2));
        std::cout << "Salimos Otro Scope" << std::endl;
    }
    std::cout << "Process Function Call" << std::endl;
    l1.push_front(processMessageUPTR(std::move(l1.front())));
    std::cout << "Process Function End" << std::endl;
    {
        std::cout << "l1 size: " << l1.size() << std::endl;
        std::cout << "Move Message 2" << std::endl;
        std::unique_ptr<message> spt2(std::move(l1.front()));
        std::cout << "l1 size: " << l1.size() << std::endl;
        std::cout << "Borramos message 2" << std::endl;
        l1.pop_front();
        std::cout << "l1 size: " << l1.size() << std::endl;
        std::cout << "Message 2 Borrado : " << std::endl;
        std::cout << "Contenido MSG 2 " << spt2->getString() << std::endl;
        std::cout << "añadimos MSG2 a l2 " << std::endl;
        l2.push_back(std::move(spt2));
    }
    std::cout << "Obtenemos Mensaje Lista 2 " << l2.front()->getString() << std::endl;
    std::cout << "Salimos Programa." << std::endl;
}
示例#3
0
int Calibration::read(QString filename)
{
       std::ifstream fichier((char*)filename.toStdString().c_str(), std::ios::in);
       if (!fichier) {
           qWarning() << "Cannot read calibration file " << filename;
           return 0;
       }

       clear();

       std::string ligne;  // déclaration d'une chaîne qui contiendra la ligne lue
       unsigned int etape_calcul = 0;

       while(std::getline(fichier,ligne)) // tant que l'on arrive pas a la fin du fichier
       {
           // take ending off the line
           ligne.erase(ligne.find_last_not_of(" \n\r\t")+1);

           if(!ligne.empty())
            {
                // pivot + focale + axis + ccd rotation
                if(ligne.size() == 91)
                {
                    etape_calcul = 1;
                }

                // sources
                if(ligne.size() == 70)
                {
                    etape_calcul = 2;
                }

                if(!ligne.empty())
                {
                    switch(etape_calcul)
                    {
                    case 1:
                    {
                        char *buffer1 = strdup((char*)ligne.c_str());
                        QString id_BCAM = QString::fromStdString(strtok(buffer1," "));
                        QString tps_calib = QString::fromStdString(strtok( NULL, " " ));
                        char *x_pivot = strtok( NULL, " " );
                        char *y_pivot = strtok( NULL, " " );
                        char *z_pivot = strtok( NULL, " " );
                        char *x_axis = strtok( NULL, " " );
                        char *y_axis = strtok( NULL, " " );
                        char *z_axis = strtok( NULL, " " );
                        char *dist_ccd_pivot = strtok( NULL, " " );
                        char *ccd_rotation = strtok( NULL, " " );

                        Point3d pv(atof(x_pivot), atof(y_pivot), atof(z_pivot));
                        Point3d ax(atof(x_axis), atof(y_axis),atof(z_axis));
                        float focale = atof(dist_ccd_pivot);
                        float angle_rotation = atof(ccd_rotation);
                        Calib1 cal1(id_BCAM, tps_calib, pv, ax, focale, angle_rotation);
                        add(cal1);
                    }
                    break;

                    case 2:
                    {
                        char *buffer2 = strdup((char*)ligne.c_str());
                        QString id_BCAM_2 = QString::fromStdString(strtok(buffer2," "));
                        QString tps_calib_2 = QString::fromStdString(strtok( NULL, " " ));
                        char *x1_flash = strtok( NULL, " " );
                        char *y1_flash = strtok( NULL, " " );
                        char *x2_flash = strtok( NULL, " " );
                        char *y2_flash = strtok( NULL, " " );
                        char *z_flash = strtok( NULL, " " );

                        Point3d spt1(atof(x1_flash), atof(y1_flash), atof(z_flash));
                        Point3d spt2(atof(x2_flash), atof(y2_flash), atof(z_flash));
                        Calib2 cal2(id_BCAM_2, spt1, spt2);
                        add(cal2);
                    }
                    break;

                    }

                }
            }
      }
       //affichage du contenu de la base de donnees qui contient le fichier de calibration
       /*for(int i=0; i<base_donnees.Get_liste_calib1().size(); i++)
       {
              base_donnees.Get_liste_calib1().at(i).Affiche();
       }
       for(int j=0; j<base_donnees.Get_liste_calib2().size(); j++)
       {
              base_donnees.Get_liste_calib2().at(j).Affiche();
       }*/

       fichier.close();

       this->filename = filename;
       return 1;
}