arrays.sol 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. enum Permission {
  2. Perm1, Perm2, Perm3, Perm4, Perm5, Perm6, Perm7, Perm8
  3. }
  4. /// This is a test contract which tests arrays
  5. contract arrays {
  6. uint64 user_count;
  7. struct user {
  8. string name;
  9. bytes32 addr;
  10. uint64 id;
  11. Permission[] perms;
  12. }
  13. user[2048] users;
  14. mapping (bytes32 => uint64) addressToUser;
  15. function addUser(uint64 id, bytes32 addr, string name, Permission[] perms) public {
  16. user storage u = users[id];
  17. u.name = name;
  18. u.addr = addr;
  19. u.id = id;
  20. u.perms = perms;
  21. addressToUser[addr] = id;
  22. assert(id <= users.length);
  23. }
  24. function getUserById(uint64 id) public view returns (user) {
  25. assert(users[id].id == id);
  26. return users[id];
  27. }
  28. function getUserByAddress(bytes32 addr) public view returns (user) {
  29. uint64 id = addressToUser[addr];
  30. assert(users[id].id == id);
  31. return users[id];
  32. }
  33. function userExists(uint64 id) public view returns (bool) {
  34. return users[id].id == id;
  35. }
  36. function removeUser(uint64 id) public {
  37. bytes32 addr = users[id].addr;
  38. delete users[id];
  39. delete addressToUser[addr];
  40. }
  41. function hasPermission(uint64 id, Permission p) public view returns (bool) {
  42. user storage u = users[id];
  43. assert(u.id == id);
  44. for (uint32 i = 0; i < u.perms.length; i++) {
  45. if (u.perms[i] == p) {
  46. return true;
  47. }
  48. }
  49. return false;
  50. }
  51. }