Esempio n. 1
0
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;
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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;
}
Esempio n. 5
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;
	}
}
Esempio n. 6
0
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;
}
Esempio n. 7
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;
}
Esempio n. 10
0
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;

}