Re: CTFE sort of tuples

2019-05-03 Thread Timon Gehr via Digitalmars-d-learn

On 02.05.19 09:28, Stefan Koch wrote:

On Thursday, 2 May 2019 at 02:54:03 UTC, Andrey wrote:

Hello, I have got this code:


    [...]


I want to sort array of tuples using "data" element in CTFE. But this 
code give me errors:

[...]


As I understand the function "sort" sometimes can't be run at CT 
because of reinterpreting cast.

In this case how to sort?


write a sort?

a bubble-sort should be sufficient for if the arrays are as short as in 
the example.


Well, clearly, we should be able to /swap values/ at compile time.


Re: CTFE sort of tuples

2019-05-02 Thread Stefan Koch via Digitalmars-d-learn

On Thursday, 2 May 2019 at 02:54:03 UTC, Andrey wrote:

Hello, I have got this code:


[...]


I want to sort array of tuples using "data" element in CTFE. 
But this code give me errors:

[...]


As I understand the function "sort" sometimes can't be run at 
CT because of reinterpreting cast.

In this case how to sort?


write a sort?

a bubble-sort should be sufficient for if the arrays are as short 
as in the example.


CTFE sort of tuples

2019-05-01 Thread Andrey via Digitalmars-d-learn

Hello, I have got this code:


alias Group = Tuple!(int[], "data", int, "key");

void main()
{
enum group = [
Group([1,2,3,4], 1),
Group([5,3], 1),
Group([4,5,4, 8, 9, 4], 1),
Group([2,3,4], 1),
];

enum result = group.sort!"a.data < b.data"().array(); }


I want to sort array of tuples using "data" element in CTFE. But 
this code give me errors:

/dlang/dmd/linux/bin64/../../src/phobos/std/algorithm/mutation.d(2782): Error: reinterpreting cast 
from Tuple!(int[], "data", int, "key")* to ubyte* is not supported in CTFE
/dlang/dmd/linux/bin64/../../src/phobos/std/algorithm/mutation.d(3014):
called from here: swap(r[i1], r[i2])
/dlang/dmd/linux/bin64/../../src/phobos/std/algorithm/sorting.d(1672):
called from here: swapAt(r, 2LU, 3LU)
/dlang/dmd/linux/bin64/../../src/phobos/std/algorithm/sorting.d(2112):
called from here: shortSort(r)
/dlang/dmd/linux/bin64/../../src/phobos/std/algorithm/sorting.d(1875):
called from here: quickSortImpl(r, r.length)
onlineapp.d(32):called from here: sort([Tuple([1, 2, 3, 
4], 1), Tuple([5, 3], 1), Tuple([4, 5, 4, 8, 9, 4], 1), 
Tuple([2, 3, 4], 1)])
onlineapp.d(32):called from here: array(sort([Tuple([1, 
2, 3, 4], 1), Tuple([5, 3], 1), Tuple([4, 5, 4, 8, 9, 4], 1), 
Tuple([2, 3, 4], 1)]))


As I understand the function "sort" sometimes can't be run at CT 
because of reinterpreting cast.

In this case how to sort?