pragma solidity ^0.4.24; contract PCL{ //mapping(uint256 => uint) queue; // uint256 first = 1; // uint256 last = 0; // function enqueue(uint data) public { // last += 1; // queue[last] = data; // } // function dequeue() public returns (uint data) { // require(last >= first); // non-empty queue // data = queue[first]; // delete queue[first]; // first += 1; // } struct User { uint id; string name; } struct JointAcc { uint id; uint coin1; uint coin2; } mapping (uint => JointAcc[]) public joint_acc; mapping (uint => User) public user_map; // mapping (uint => JointAcc) public joint_acc; constructor() public{ } function registerUser(uint user_id, string uname) public { User memory new_user = User(user_id, uname); user_map[user_id] = new_user; } function getuser(uint user_id) public view returns(string){ return user_map[user_id].name; } function createAcc(uint user_id_1,uint user_id_2) public{ joint_acc[user_id_1].push(JointAcc(user_id_2,100,100)); joint_acc[user_id_2].push(JointAcc(user_id_1,100,100)); } function sendAmount(uint user_id_1,uint user_id_2,uint amt) public { mapping(uint => bool) visited; mapping(uint256 => uint) queue; mapping(uint => uint) d; mapping(uint => uint) p; uint256 first = 1; uint256 last = 0; // q.push(s); last = last+1; queue[last] = user_id_1; visited[user_id_1] = true; p[user_id_1] = 0; d[user_id_1] = 0; while (last >= first) { uint v = queue[first]; delete queue[first]; first += 1; for (uint256 i=0;i<joint_acc[v].length;i++) { if (!visited[joint_acc[v][i].id]) { visited[joint_acc[v][i].id] = true; last = last+1; queue[last] = joint_acc[v][i].id; d[joint_acc[v][i].id] = d[v] + 1; p[joint_acc[v][i].id] = v; } } } assert(visited[user_id_2]); for(i=user_id_2;i!=user_id_1;i=p[i]) { assert(joint_acc[i][p[i]].coin2 >= amt); joint_acc[i][p[i]].coin1+=amt; joint_acc[i][p[i]].coin2-=amt; joint_acc[p[i]][i].coin1-=amt; joint_acc[p[i]][i].coin2+=amt; } } }
0.4.18