Advertisement
Guest User

Untitled

a guest
Jan 24th, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. use "list.verona"
  2.  
  3. class Group {
  4. _pool: cown[Pool] & imm;
  5. _resources: Queue[U64Obj] & iso;
  6.  
  7. create(pool: cown[Pool] & imm,
  8. resources: Queue[U64Obj] & iso): Group & iso {
  9. var result = new Group;
  10. result._pool = pool;
  11. result._resources = resources;
  12. result
  13. }
  14.  
  15. final(self: mut) {
  16. Pool.return(self._pool, self._resources = Queue.create(0));
  17. }
  18. }
  19.  
  20. class Pool {
  21. _resources: Queue[U64Obj] & iso;
  22.  
  23. create(): cown[Pool] & imm {
  24. var result = new Pool;
  25. result._resources = Queue.create(1);
  26. cown.create(result)
  27. }
  28.  
  29. _return(self: mut, resources: Queue[U64Obj] & iso) {
  30. match (mut-view (resources)).remove() {
  31. var _: None => {} /* finished returning resources */
  32. var o: U64Obj => {
  33. (mut-view (self._resources)).add(o);
  34. self._return(resources);
  35. }
  36. }
  37. }
  38.  
  39. return(pool: cown[Pool] & imm, resources: Queue[U64Obj] & iso) {
  40. Builtin.print1("Returning Resources: {:#}\n", mut-view resources);
  41. when (var p = pool) {
  42. // FIXME: at this point resources stops existing
  43. //Builtin.print1("Resources: {:#}\n", mut-view resources);
  44. //p._return(resources);
  45. }
  46. }
  47. }
  48.  
  49. class Main {
  50. main() {
  51. var pool = Pool.create();
  52. var resources = Queue.create(2);
  53. (mut-view resources).add(U64Obj.create(1));
  54. (mut-view resources).add(U64Obj.create(2));
  55. (mut-view resources).add(U64Obj.create(3));
  56. var g = Group.create(pool, resources);
  57. }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement