/********************************** * Interface to create a blackbox * **********************************/ ALGEB lbCreateBlackboxFromMatrix(MKernelVector kv, ALGEB A, const LinBox::integer &p){ RTableSettings setting; RTableGetSettings(kv,&setting,A); size_t m,n; m = RTableUpperBound(kv, A, 1); n = RTableUpperBound(kv, A, 2); std::stringstream *buffer= new std::stringstream();//std::string(buffer_data, m*n)); //Timer chrono; //chrono.start(); if (setting.storage == RTABLE_RECT) DenseMatrixToBuffer(kv, A, *buffer, m, n, setting); else if (setting.storage == RTABLE_SPARSE) SparseMatrixToBuffer(kv, A, *buffer, m, n, setting); else MapleRaiseError(kv, "Matrix storage must be either dense or sparse"); //chrono.stop(); //std::ofstream FILE("MAPLE_FILE.TXT"); //FILE<<buffer->str()<<"\n"; //FILE.close(); //std::cout<<"buffering in <- : "<<chrono; //chrono.clear(); //chrono.start(); LB_GMP_SET(); const DomainKey *Dkey = &createDomain(p); const BlackboxKey *Bkey = &createBlackbox(*Dkey, *buffer); deleteDomain (*Dkey); LB_GMP_RESTORE(); //chrono.stop(); //std::cout<<"buffering out -> : "<<chrono; delete buffer; return BlackboxKeyToMaple(kv, *Bkey); }
ALGEB lbCreateVectorFromVector(MKernelVector kv, ALGEB V, const LinBox::integer &p){ LB_GMP_SET(); const DomainKey *Dkey = &createDomain(p); LB_GMP_RESTORE(); std::stringstream buffer; RTableSettings setting; RTableData tmp; RTableGetSettings(kv,&setting,V); size_t n; n = RTableUpperBound(kv, V, 1); buffer<<n<<"\n"; M_INT index[1]; if (setting.data_type == RTABLE_INTEGER8) for (size_t i=1;i<n+1; ++i){index[0]=(M_INT)i; tmp=RTableSelect(kv, V, index); buffer<<tmp.int8<<"\n"; } if (setting.data_type == RTABLE_INTEGER16) for (size_t i=1;i<n+1; ++i){index[0]=(M_INT)i; tmp=RTableSelect(kv, V, index); buffer<<tmp.int16<<"\n"; } if (setting.data_type == RTABLE_INTEGER32) for (size_t i=1;i<n+1; ++i){index[0]=(M_INT)i; tmp=RTableSelect(kv, V, index); buffer<<tmp.int32<<"\n"; } if (setting.data_type == RTABLE_INTEGER64) for (size_t i=1;i<n+1; ++i){index[0]=(M_INT)i; tmp=RTableSelect(kv, V, index); buffer<<tmp.int64<<"\n"; } if (setting.data_type == RTABLE_FLOAT32) for (size_t i=1;i<n+1; ++i){index[0]=(M_INT)i; tmp=RTableSelect(kv, V, index); buffer<<tmp.float32<<"\n"; } if (setting.data_type == RTABLE_FLOAT64) for (size_t i=1;i<n+1; ++i){index[0]=(M_INT)i; tmp=RTableSelect(kv, V, index); buffer<<tmp.float64<<"\n"; } if (setting.data_type == RTABLE_DAG) { LinBox::integer ibuf; for (size_t i=1;i<n+1; ++i){index[0]=(M_INT)i; tmp=RTableSelect(kv, V, index); GMPMapleToLinBox(ibuf, kv,tmp.dag); buffer<<ibuf<<"\n"; } } if ((setting.data_type == RTABLE_COMPLEX)|| (setting.data_type == RTABLE_CXDAG)) MapleRaiseError(kv, "data type format in the matrix is not yet recognized by LinBox "); LB_GMP_SET(); const VectorKey *Vkey = &createVector(*Dkey, buffer); deleteDomain (*Dkey); LB_GMP_RESTORE(); return VectorKeyToMaple(kv, *Vkey); }
int processData(tdns* dns,char** argv,char* cmd,FILE* logf) { tdomain data; tdomain td; char ip_origen[IP_MAX]; char ip_destino[IP_MAX]; char msg[300]; if(strcmp(argv[1],CMD_SEND)==0) { if(urlExists(*dns,argv[2])!=RES_OK) return RES_ERROR; if(urlExists(*dns,argv[3])!=RES_OK) return RES_ERROR; getValue(dns,argv[2],&data); strcpy(ip_origen,data.ip); getValue(dns,argv[3],&data); strcpy(ip_destino,data.ip); encryptMsg(msg,data.offset); log(logf,CMD_SEND,argv[2],ip_origen,argv[3],ip_destino,argv[3],msg); printf("Mensaje encriptado: %s\n",msg); } else if(strcmp(argv[1],CMD_GETIP)==0) { printf("Entré en getip\n"); if(urlExists(*dns,argv[2])!=RES_OK) return RES_ERROR; if(urlExists(*dns,argv[3])!=RES_OK) return RES_ERROR; getValue(dns,argv[2],&data); strcpy(ip_origen,data.ip); getValue(dns,argv[3],&data); strcpy(ip_destino,data.ip); log(logf,CMD_GETIP,argv[2],ip_origen,argv[3],ip_destino,"",""); printf("Origen: %s %s\nDestino: %s %s\n",argv[2],ip_origen,argv[3],ip_destino); } else if(strcmp(argv[1],CMD_ADDDOMAIN)==0) { if(urlExists(*dns,argv[2])==RES_OK) { printf("Ya existe %s.\n",argv[2]); return RES_ERROR; } strcpy(td.domain,argv[2]); strcpy(td.ip,argv[3]); genoffset(td.domain); getoffset(td.domain,&(td.offset)); AB_Crear(&(td.subab),sizeof(tdomain)); if(addDomain(dns,argv[2],&td)!=RES_OK) return RES_ERROR; log(logf,CMD_ADDDOMAIN,argv[2],argv[3],"","","",""); printf("Se agrego %s con direccion ip %s.\n",argv[2],argv[3]); } else if(strcmp(argv[1],CMD_DELETEDOMAIN) == 0) { if(urlExists(*dns,argv[2])!=RES_OK) { printf("No existe %s para eliminar.\n",argv[2]); return RES_ERROR; } getValue(dns,argv[2],&data); printf("Dato obtenido: %s %s.\n",data.domain,data.ip); strcpy(ip_origen,data.ip); deleteDomain(dns,argv[2]); log(logf,CMD_DELETEDOMAIN,argv[2],ip_origen,"","","",""); printf("Se elimino a %s con ip %s.\n",argv[2],ip_origen); } else { printf("Comando equivocado.\n"); showHelp(argv[0]); return RES_ERROR; } return RES_OK; }