OnlineTracker::EntryList* AnilistDotCoTracker::fetchRemote() { if (this->user.id <= 0) { if (!this->user.fetchCurrentlyLoggedInUser(this->credentials, this->lock)) { return NULL; } } QUrl url(QString("https://anilist.co/api/user/%1/animelist").arg(user.id)); CurlResult userData(NULL); CURL* handle = credentials.curlClient(lock, url.toString(QUrl::FullyEncoded).toStdString().c_str(), userData); CURLcode error = curl_easy_perform(handle); curl_easy_cleanup(handle); if (error || userData.data.str().size() < 2) { qDebug() << "received error" << error << "for anilist.co Tracker Update '" << url << "'' with this message:\n"; userData.print(); } else { userData.print(); nw::JsonReader jr(userData.data); EntryList* entries = new EntryList(jr); jr.close(); if (!jr.getErrorMessage().empty()) { qDebug() << "got error from anilist.co status list parsing:" << QString(jr.getErrorMessage().c_str()); delete entries; return NULL; } return entries; } return NULL; }
static void jmp(ulong *dest) { long d; if((d = brdisp(dest)) < 0){ ldbigc((ulong)dest, Rpic); /* Rpic & Rctr must be free */ jr(Rpic); } else gen(Ob | d); }
TilePallet::TilePallet(const std::string path) { leftBorderWidth = 0; rightBorderWidth = 0; tileHeight = 0; tileWidth = 0; friction = 0; restitution = 0; nw::JsonReader jr(path); this->describe(jr); jr.close(); std::cerr << jr.getErrorMessage() << std::endl; }
bool AnilistDotCoTracker::User::fetchCurrentlyLoggedInUser(const OnlineCredentials& credentials, OnlineCredentials::TimeLock& lock) { CurlResult userData(NULL); CURL* handle = credentials.curlClient(lock, "https://anilist.co/api/user", userData); CURLcode error = curl_easy_perform(handle); curl_easy_cleanup(handle); if (error || userData.data.str().size() < 2) { qDebug() << "received error" << error << "for anilist.co user fetch with this message:\n"; userData.print(); } else { userData.print(); nw::JsonReader jr(userData.data); this->describe(jr); jr.close(); } return this->id > 0; }
void execALU(){ switch(controle_alu.op_code){ case 1: add(); break; case 2: addinc(); break; case 3: and(); break; case 4: andnota(); break; case 5: asl(); break; case 6: asr(); break; case 7: deca(); break; case 8: inca(); break; case 9: j(); break; case 10: jal(); break; case 11: jf(); break; case 12: jr(); break; case 13: jt(); break; case 14: lch(); break; case 15: lcl(); break; case 16: load(); break; case 17: loadlit(); break; case 18: lsl(); break; case 19: lsr(); break; case 20: nand(); break; case 21: nor(); break; case 22: ones(); break; case 23: or(); break; case 24: ornotb(); break; case 25: passa(); break; case 26: passnota(); break; case 27: store(); break; case 28: sub(); break; case 29: subdec(); break; case 30: xnor(); break; case 31: xor(); break; case 32: zeros(); break; } }
int exe(FILE* program) //program指向存有待执行程序机器码的文件 { char* tmp_instru=(char*)malloc(33*sizeof(char)); //读机器码 programTail=programHead; while(fscanf(program,"%s",tmp_instru)!=EOF) { instru=0; int i=0; unsigned j=1; for(i=31;i>=0;i--) { if(tmp_instru[i]=='1') { instru+=j; j*=2; } else { j*=2; } }//将机器码转为unsi unsigned char* tmp_R=&instru; for(i=0;i<4;i++) { writeMymemory(programTail+i,tmp_R+i);//装载指令 } programTail+=4;//最后一条指令的下一条指令的地址,用来判断程序是否执行完 } pcShort=programHead; pc=pcShort; while(pcShort!=programTail) { instru=0; //指令寄存器清零 unsigned char* tmp_R=&instru; unsigned short addr=addrToMyAddr(pc); int i; for(i=0;i<4;i++) { readMymemory(addr+i,tmp_R+i);//取指令 } unsigned tmp=instru>>26;//得到指令op //printf("the op is : %u\n",tmp); unsigned numRs=0,numRt=0,numRd=0,numFs=0,numFt=0,numFd=0,tmp_fuc=0; switch(tmp) { case 0x00000023: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=lw(pc); break; case 0x0000002B: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=sw(pc); break; case 0x00000008: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=addi(pc); break; case 0x00000009: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=addiu(pc); break; case 0x0000000A: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=slti(pc); break; case 0x0000000B: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=sltiu(pc); break; case 0x0000000C: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=andi(pc); break; case 0x0000000D: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=ori(pc); break; case 0x0000000E: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=xori(pc); break; case 0x00000024: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=lbu(pc); break; case 0x00000020: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=lb(pc); break; case 0x00000028: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=sb(pc); break; case 0x0000000F: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=lui(pc); break; case 0x00000004: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=beq(pc); break; case 0x00000005: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; //printf("%u,%u,%u,%u\n",numRt,numRs,*RS1,*RS2); lig=instru<<16>>16; // printf("%u\n",lig); pc=bne(pc); break; case 0x00000006: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=blez(pc); break; case 0x00000007: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=bgtz(pc); break; case 0x00000001: numRs=instru<<6>>27; numRt=instru<<11>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; lig=instru<<16>>16; pc=bltz(pc); break; case 0x00000002: pc=j(pc); break; case 0x00000003: pc=jal(pc); break; case 0x00000000: numRs=instru<<6>>27; numRt=instru<<11>>27; numRd=instru<<16>>27; RS1=myRegister+numRt; RS2=myRegister+numRs; RD=myRegister+numRd; tmp_fuc=instru%64; switch(tmp_fuc) { case 32: pc=add(pc); break; case 33: pc=addu(pc); break; case 34: pc=sub(pc); break; case 35: pc=subu(pc); break; case 24: pc=mul(pc); break; case 25: pc=mulu(pc); break; case 26: pc=myDiv(pc); break; case 27: pc=divu(pc); break; case 42: pc=slt(pc); break; case 43: pc=sltu(pc); break; case 36: pc=myAnd(pc); break; case 37: pc=myOr(pc); break; case 39: pc=nor(pc); break; case 40: pc=myXor(pc); break; case 8: pc=jr(pc); break; case 9: pc=jalr(pc); break; case 0: pc=nop(pc); break; case 16: pc=mfhi(pc); break; case 18: pc=mflo(pc); break; default: break; } break; case 0x00000010: numRt=instru<<11>>27; numRd=instru<<16>>27; RS1=myRegister+numRt; if(numRd==14) { pc=mfepc(pc); } else if(numRd==13) { pc=mfco(pc); } else return -1; break; case 0x00000031: numRs=instru<<6>>27; numFt=instru<<11>>27; RS2=myRegister+numRs; FS1=myFloatReg+numFt; lig=instru<<16>>16; pc=lwc1(pc); //printf("/********\nL.S %u %u\n****************/\n",numFt,numRs); break; case 0x0000001F: numRs=instru<<6>>27; numFt=instru<<11>>27; RS2=myRegister+numRs; FS1=myFloatReg+numFt; lig=instru<<16>>16; pc=S_D(pc); //printf("/********\nL.D %u %u\n****************/\n",numFt,numRs); break; case 0x0000001E: numRs=instru<<6>>27; numFt=instru<<11>>27; RS2=myRegister+numRs; FS1=myFloatReg+numFt; lig=instru<<16>>16; //printf("/********\nS.D %u %u\n****************/\n",numFt,numRs); pc=S_D(pc); break; case 0x00000039: numRs=instru<<6>>27; numFt=instru<<11>>27; RS2=myRegister+numRs; FS1=myFloatReg+numFt; lig=instru<<16>>16; //printf("/********\nS.S %u %u\n****************/\n",numFt,numRs); pc=swc1(pc); break; case 0x00000011: numFt=instru<<11>>27; numFs=instru<<16>>27; numFd=instru<<21>>27; FS1=myFloatReg+numFt; FS2=myFloatReg+numFs; FD=myFloatReg+numFd; numRs=instru<<6>>27; tmp_fuc=instru%64; //printf("%u %u\n",tmp_fuc,numRs); if(numRs==0) { switch(tmp_fuc) { case 0: pc=add_s(pc); break; case 1: pc=sub_s(pc); break; case 2: pc=mul_s(pc); case 3: pc=div_s(pc); default: break; } } else if(numRs==1) { switch(tmp_fuc) { case 0: pc=add_d(pc); //printf("/****************\nADD.D %u %u %u\n*****************/\n",numFd,numFt,numFs); break; case 1: pc=sub_d(pc); break; case 2: pc=mul_d(pc); case 3: pc=div_d(pc); default: break; } } default:break; } pcShort=pc%0x00010000; //printf("%u %u\n",pc,pcShort); //printf("%u %u\n",pcShort,programTail); } return 0; }
int CmdJoin::process(PeerMgr &mgr ,Peer &peer) { //检查连接状态 int iret = LS_SUCCEEDED; peer.tcp_port_ = tcp_port_; peer.udp_port_ = udp_port_; //反馈join_r CmdJoinR jr(cmd_hdr_,0,mgr.version_); jr.ServerId_ = mgr.peerId_; jr.start_id_ = mgr.buffer_.start_seg_id_; jr.is_server_ = (char)mgr.is_server_; if (mgr.chId_ != cmd_hdr_.chId_) { jr.result_ = 3;//channel Id不匹配 peer.putQ(jr.serialize()); } else { peer.putQ(jr.serialize()); //无论是否允许加入都要发生push_peers if (mgr.is_server_) { CmdPushPeers cpprs(mgr.peer_list_); peer.putQ(cpprs.serialize(peer.get_next_sequence(),mgr.chId_,mgr.peerId_)); //推送头 CmdPushHeader cphdr(mgr.mhdr_); peer.putQ(cphdr.serialize(peer.get_next_sequence(),mgr.chId_,mgr.peerId_)); } peer.is_behind_nat_ = IsLowID(peer.peerId_); if (mgr.peer_list_.size() < mgr.config_.max_peer_list_size_ && !(mgr.is_server_ && peer.is_behind_nat_)) //允许加入 { ////如果接受连接 则加入到本机的列表中。在Peer的open中已经加入 ////PeerPtr p =&peer; if(mgr.peer_list_.join(&peer) == LS_SUCCEEDED) //succeed { //如果接受连接,发送ExBm消息 CmdExBm exBm; exBm.lpData_ = mgr.mhdr_.data_; peer.putQ(exBm.serialize(peer.get_next_sequence(),mgr.chId_,mgr.peerId_)); } else { iret = LS_FAILED; //delete &peer; } }//如果不允许连接则发送ask for disconnect消息 else { CmdAskForDisconnect cmd; peer.putQ(cmd.serialize(peer.get_next_sequence(),mgr.chId_,mgr.peerId_)); } } return iret; }
void simulate_MainWindow::simulate() { currInstr=instrList[PC/4]; currBin=binList[PC/4]; vector<string> result; string temp=currInstr.toStdString(); string_split(temp,result); coutString=""; RD=RS=RT=immediate=address=0; v0=v1=v2=v3="None"; v0=result[0]; v1=result[1]; printf("v0=%s\nv1=%s\n",v0.c_str(),v1.c_str()); if(v0=="jr"||v0=="j"||v0=="jal") // 2 parametes { if(v0=="jr") { jr(); } else if(v0=="j") j(); else if(v0=="jal") jal(); } else if(v0=="lui") // 3 parameters { v2=result[2]; lui(); } else // 4 parameters { v2=result[2]; v3=result[3]; if(v0=="add") add(); else if(v0=="addu") addu(); else if(v0=="sub") sub(); else if(v0=="subu") subu(); else if(v0=="and") and_funct(); else if(v0=="or") or_funct(); else if(v0=="xor") xor_funct(); else if(v0=="nor") nor(); else if(v0=="slt") slt(); else if(v0=="sltu") sltu(); else if(v0=="sll") sll(); else if(v0=="srl") srl(); else if(v0=="sllv") sllv(); else if(v0=="srlv") srlv(); else if(v0=="srav") srav(); else if(v0=="addi") addi(); else if(v0=="addiu") addiu(); else if(v0=="andi") andi(); else if(v0=="ori") ori(); else if(v0=="xori") xori(); else if(v0=="sw") sw(); else if(v0=="lw") lw(); else if(v0=="beq") beq(); else if(v0=="bne") bne(); else if(v0=="slti") slti(); else if(v0=="sltiu") sltiu(); } display_all(); }
e::Quaternion<double> diagonalizer(e::Matrix<double, 3, 3> A, e::Matrix<double, 3, 3> &Q, e::Matrix<double, 3, 3> &D) { //A must be a symmetrical matrix, otherwise we would have to use inverse instead of transpose! //returns a quaternion such that its matrix can be used to diagonalize A //in eigen decomposition we are searching for: A = Q * D * Q^T, where D = Q^T * A * Q // !!!NOTE: for row major the multiplication is in the opposite order, so we are using D = Q * A * Q^T ;) const double thetaMax = std::sqrt(FLT_MAX); const int maxSteps = 24; // won't need that many probably const int epsilon = 1e-6; // precision e::Quaternion<double> q(1, 0, 0, 0); //keep it normalized for(int i = 0; i < maxSteps; i++) { Q = q.toRotationMatrix();// // for q = q_0 + i* q_1 + j * q_2 + k* q_3 // same as q = w + i * x + j * y + k * v // i,j,k imaginary // // | q_0^2 + q_1^2 - q_2^2 - q_3^2 2*(q_1*q_2 - q_0*q_3) 2*(q_0*q_2 + q_1*q_3) | // | 2*(q_1*q_2 + q_0*q_3) q_0^2 - q_1^2 + q_2^2 - q_3^2 2*(q_2*q_3 - q_0*q_1) | // | 2*(q_1*q_3 - q_0*q_2) 2*(q_0*q_1 + q_2*q_3) q_0^2 - q_1^2 - q_2^2 + q_3^2 | D = Q * A * Q.transpose(); e::Vector3d offdiag( D(1 /*row */, 2 /*col*/), D(0, 2), D(0, 1)); //elements off the diagonale e::Vector3d om = offdiag.cwise().abs(); //element (coefficicent) wise abs int k = ( om[0] > om[1] && om[0] > om[2]) ? 0 : (om[1] > om[2]) ? 1 : 2; int k1 = (k + 1) % 3; int k2 = (k + 2) % 3; if(om[k] < epsilon) { std::cout << "offdiag smaller than epsilon " << std::endl; break; //already diagonal if the largest is smaller than our epsilon :) } double diag2 = D(k2, k2); double diag1 = D(k1, k1); double thet = ( diag2 - diag1 )/(2*offdiag[k]); // theta = (a_qq - a_pp) / (2*a_pg) double sgn = (thet > 0.0f)? 1.0f: -1.0f; thet *= sgn; //use abs; // vv don't really understand - should look at Jacobyi Transformation of a Symmetric Matrix double t = sgn/(thet + ( (thet < thetaMax) ? std::sqrt(thet*thet + 1.0f): thet)); // sign(T) / (|T| + sqrt(T*T + 1)) //as in tangent t = s/c - t = sgn(theta) / ( |theta| + sqrt(theta*theta + 1)) //double t = sgn/(that + std::sqrt(thet*thet + 1)); //cosinus double c = 1.0f/std::sqrt(t*t + 1.0f); // c = 1/(t*t + 1) t = s/c double s = t*c; e::Quaternion<double> jr(0, 0, 0, 0); //jacobi rotation for this iteration double *jrk = &(jr.coeffs().data()[k]); *jrk = sgn*std::sqrt((1.0f - c)/2.0); //using 1/2 angle identity sin^2 (a) = 1/2 (1 - cos(2a)) *jrk *= -1.0f; // since row major //jr[k] should be bound between [-1,1] jr.w() = std::sqrt(1.0f - (*jrk)*(*jrk)); // just so we have a normalized matrix if(jr.w() > (1 - epsilon)) { std::cout << "weight close to 1" << std::endl; break; //pretty precise } std::cout << "Update: " << jr.w() << " " << jr.x() << " " << jr.y() << " " << jr.z() << std::endl; q = q*jr; //quaternion multiplication // (w + ix + jy + kz)*(d + ia + jb + kc) and ij = k = -ji; jk = i = -kj; ki = j = -ik; i*i = j*j = k*k = -1 q.normalize(); // so that w*w + x*x + y*y + z*z = 1 => q/|q| -> |q| = sqrt(w*w + ... etc std::cout << "Quaternion: " << q.w() << " " << q.x() << " " << q.y() << " " << q.z() << std::endl; } Q = q.toRotationMatrix(); D = Q * A * Q.transpose(); return q; }
void instruction_decode(int index){ if(test==1) printf("enter ID, with index=%d\n",index); if(index==0 || index==34){ //NOP or HALT return; } /**stall detect**/ if(index>=1&&index<=9){ if(DM_dest_reg==RS || DM_dest_reg==RT){ if(dest_reg!=RS && dest_reg!=RT){ stall=1; } } } else if(index>=10&&index<=12){ if(DM_dest_reg==RT){ if(dest_reg!=RT){ stall=1; } } } else if(index==13){ if(dest_reg==RS){ stall=1; } } else if(index>=16&&index<=22 || index>=27&&index<=30){ if(DM_dest_reg==RS){ if(dest_reg!=RS){ stall=1; } } } else if(index>=23&&index<=25){ if(DM_dest_reg==RS || DM_dest_reg==RT){ if(dest_reg!=RS && dest_reg!=RT){ stall=1; } } } else if(index>=31&&index<=33){ if(dest_reg==RS || dest_reg==RT){ stall=1; } if(DM_dest_reg==RS || DM_dest_reg==RT){ if(EX_index>=18&&EX_index<=22){ stall=1; } } } /**flush detect**/ if(index==13){ jr(RS); flush=1; } else if(index==14){ jj(C); flush=1; } else if(index==15){ jal(C); flush=1; } else if(index==31){ beq(RS,RT,signedC); flush=1; } else if(index==32){ bne(RS,RT,signedC); flush=1; } else if(index==33){ bgtz(RS,signedC); flush=1; } ID_prev=index; EX_index=index; }