www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - CTFE sort of tuples

reply Andrey <saasecondbox yandex.ru> writes:
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?
May 01 2019
parent reply Stefan Koch <uplink.coder googlemail.com> writes:
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.
May 02 2019
parent Timon Gehr <timon.gehr gmx.ch> writes:
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.
May 03 2019