D Paste by downs
Description: Compile-time quicksort
Hide line numbers

Create new paste
Post a reply
View replies

Paste:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
module test132;

template Tuple(T...) { alias T Tuple; }

struct Value(int _v) { const v = _v; }

template Select(alias A, T...) {
  static if (!T.length) alias Tuple!() Select;
  else static if (A!(T[0].v)) alias Tuple!(T[0], Select!(A, T[1 .. $])) Select;
  else alias Tuple!(Select!(A, T[1 .. $])) Select;
}

template Bigger(int I) {
  template Bigger(int K) {
    const bool Bigger = K > I;
  }
}

template SmallerEq(int I) {
  template SmallerEq(int K) {
    const bool SmallerEq = K <= I;
  }
}

template Quicksort(T...) {
  static if (T.length <= 1) alias T Quicksort;
  else alias Tuple!(
    Quicksort!(Select!(SmallerEq!(T[$/2].v), T)),
    Quicksort!(Select!(Bigger!(T[$/2].v), T))
  ) Quicksort;
}

template Values(T...) {
  static if (!T.length) alias Tuple!() Values;
  else alias Tuple!(Value!(T[0]), Values!(T[1 .. $])) Values;
}

alias Quicksort!(Values!(4, 2, 1, 3)) SortedValues;

import std.stdio;

void main() { writefln(SortedValues.stringof); }

Replies:
No replies posted yet