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; }
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; }
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; }