Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use "list.verona"
- class Group {
- _pool: cown[Pool] & imm;
- _resources: Queue[U64Obj] & iso;
- create(pool: cown[Pool] & imm,
- resources: Queue[U64Obj] & iso): Group & iso {
- var result = new Group;
- result._pool = pool;
- result._resources = resources;
- result
- }
- final(self: mut) {
- Pool.return(self._pool, self._resources = Queue.create(0));
- }
- }
- class Pool {
- _resources: Queue[U64Obj] & iso;
- create(): cown[Pool] & imm {
- var result = new Pool;
- result._resources = Queue.create(1);
- cown.create(result)
- }
- _return(self: mut, resources: Queue[U64Obj] & iso) {
- match (mut-view (resources)).remove() {
- var _: None => {} /* finished returning resources */
- var o: U64Obj => {
- (mut-view (self._resources)).add(o);
- self._return(resources);
- }
- }
- }
- return(pool: cown[Pool] & imm, resources: Queue[U64Obj] & iso) {
- Builtin.print1("Returning Resources: {:#}\n", mut-view resources);
- when (var p = pool) {
- // FIXME: at this point resources stops existing
- //Builtin.print1("Resources: {:#}\n", mut-view resources);
- //p._return(resources);
- }
- }
- }
- class Main {
- main() {
- var pool = Pool.create();
- var resources = Queue.create(2);
- (mut-view resources).add(U64Obj.create(1));
- (mut-view resources).add(U64Obj.create(2));
- (mut-view resources).add(U64Obj.create(3));
- var g = Group.create(pool, resources);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement