Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
October 22, 2015 Problem Benchmarking HashSet from containers-em | ||||
---|---|---|---|---|
| ||||
At https://github.com/nordlow/justd/blob/master/containers_ex.d I want to benchmark Economic Modelings container packages. Specifically HashSet with different allocators. But when I try to use `LocalAllocator` defined as alias LocalAllocator = InSituRegion!(n, T.alignof); at https://github.com/nordlow/justd/blob/master/containers_ex.d#L59 in call to `hashSet` auto hx = iota!T(0, n).hashSet; // TODO Use LocalAllocator https://github.com/nordlow/justd/blob/master/containers_ex.d#L60 it errors as: containers_ex.d(17,38): Error: constructor containers.hashset.HashSet!(int, InSituRegion!(1048576LU, 4LU), generateHash, false).HashSet.this is not callable because it is annotated with @disable /home/per/Work/justd/containers/hashset.d(366,20): Error: struct std.experimental.allocator.building_blocks.region.InSituRegion!(1048576LU, 4LU).InSituRegion is not copyable because it is annotated with @disable /home/per/opt/x86_64-unknown-linux-gnu/dlang/linux/bin64/src/phobos/std/conv.d(4096,13): Error: static assert "Bucket cannot be emplaced from (InSituRegion!(1048576LU, 4LU))." /home/per/opt/x86_64-unknown-linux-gnu/dlang/linux/bin64/src/phobos/std/conv.d(4161,18): instantiated from here: emplaceImpl!(InSituRegion!(1048576LU, 4LU)) /home/per/Work/justd/containers/hashset.d(293,19): instantiated from here: emplace!(Bucket, InSituRegion!(1048576LU, 4LU)) containers_ex.d(17,16): instantiated from here: HashSet!(int, InSituRegion!(1048576LU, 4LU), generateHash, false) containers_ex.d(60,31): instantiated from here: hashSet!(InSituRegion!(1048576LU, 4LU), Result) Comint exited abnormally with code 1 at Thu Oct 22 13:55:25 What's wrong? |
October 22, 2015 Re: Problem Benchmarking HashSet from containers-em | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Thursday, 22 October 2015 at 11:55:39 UTC, Nordlöw wrote:
> https://github.com/nordlow/justd/blob/master/containers_ex.d
The current GitHub of containers_ex.d (using dmd git master) version works if justd repo is cloned recursively.
|
October 22, 2015 Re: Problem Benchmarking HashSet from containers-em | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Thu, 22 Oct 2015 11:55:37 +0000, Nordlöw wrote: > What's wrong? HashSet has a disabled default constructor; you need to supply the allocator instance to the constructor here https://github.com/nordlow/ justd/blob/master/containers_ex.d#L17 |
October 22, 2015 Re: Problem Benchmarking HashSet from containers-em | ||||
---|---|---|---|---|
| ||||
Posted in reply to Justin Whear | On Thursday, 22 October 2015 at 17:32:34 UTC, Justin Whear wrote: > On Thu, 22 Oct 2015 11:55:37 +0000, Nordlöw wrote: > >> What's wrong? > > HashSet has a disabled default constructor; you need to supply the allocator instance to the constructor here https://github.com/nordlow/ justd/blob/master/containers_ex.d#L17 Doesn't work. If I change auto set = HashSet!(E, Allocator)(); to auto set = HashSet!(E, Allocator)(Allocator()); it errors as containers_ex.d(17,38): Error: constructor containers.hashset.HashSet!(const(int), Mallocator, generateHash, false).HashSet.this (ulong bucketCount) is not callable using argument types (Mallocator) containers_ex.d(30,16): Error: template instance containers_ex.hashSet!(Mallocator, const(int)[]) error instantiating containers_ex.d(35,5): Error: static assert (is(typeof(__error) == const(int)*)) is false My existing call to auto set = HashSet!(E, Allocator)(); works for Mallocator as in https://github.com/nordlow/justd/blob/master/containers_ex.d#L17 but not for InSituRegion!(1024*1024, T.alignof) Why? Please, help. |
October 22, 2015 Re: Problem Benchmarking HashSet from containers-em | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Thu, 22 Oct 2015 19:41:08 +0000, Nordlöw wrote: > My existing call to > > auto set = HashSet!(E, Allocator)(); > > works for Mallocator as in > > https://github.com/nordlow/justd/blob/master/containers_ex.d#L17 > > but not for > > InSituRegion!(1024*1024, T.alignof) > > Why? Please, help. The HashSet defines different constructors based on the nature of tha allocator: https://github.com/economicmodeling/containers/blob/master/src/containers/hashset.d#L30 Specifically, if the allocator has zero state (like Mallocator), you do not pass an instance. If the allocator does have state, like InSituRegion, you need to pass an instance to the container's constructor. |
October 22, 2015 Re: Problem Benchmarking HashSet from containers-em | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Thursday, 22 October 2015 at 11:57:37 UTC, Nordlöw wrote: > On Thursday, 22 October 2015 at 11:55:39 UTC, Nordlöw wrote: >> https://github.com/nordlow/justd/blob/master/containers_ex.d > > The current GitHub of containers_ex.d (using dmd git master) version works if justd repo is cloned recursively. I updated https://github.com/nordlow/justd/blob/master/containers_ex.d as you say but now it errors as /home/per/Work/justd/containers/hashset.d(46,19): Error: struct std.experimental.allocator.building_blocks.region.InSituRegion!(1048576LU, 4LU).InSituRegion is not copyable because it is annotated with @disable /home/per/Work/justd/containers/hashset.d(42,11): Error: incompatible types for ((allocator) !is (null)): 'InSituRegion!(1048576LU, 4LU)' and 'typeof(null)' /home/per/Work/justd/containers/hashset.d(366,20): Error: struct std.experimental.allocator.building_blocks.region.InSituRegion!(1048576LU, 4LU).InSituRegion is not copyable because it is annotated with @disable /home/per/opt/x86_64-unknown-linux-gnu/dlang/linux/bin64/src/phobos/std/conv.d(4096,13): Error: static assert "Bucket cannot be emplaced from (InSituRegion!(1048576LU, 4LU))." /home/per/opt/x86_64-unknown-linux-gnu/dlang/linux/bin64/src/phobos/std/conv.d(4161,18): instantiated from here: emplaceImpl!(InSituRegion!(1048576LU, 4LU)) /home/per/Work/justd/containers/hashset.d(293,19): instantiated from here: emplace!(Bucket, InSituRegion!(1048576LU, 4LU)) containers_ex.d(34,24): instantiated from here: HashSet!(int, InSituRegion!(1048576LU, 4LU), generateHash, false) containers_ex.d(82,31): instantiated from here: hashSet!(InSituRegion!(1048576LU, 4LU), Result) Can't I use InSituRegion in this way? |
October 22, 2015 Re: Problem Benchmarking HashSet from containers-em | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Thursday, 22 October 2015 at 22:06:47 UTC, Nordlöw wrote:
> Can't I use InSituRegion in this way?
No.
InSituRegion is not copyable. Try creating a `HashSet!(InSituRegion*)` instead.
|
Copyright © 1999-2021 by the D Language Foundation