1 #ifndef MedianSampleBuffer_h
2 #define MedianSampleBuffer_h
12 template <
typename T, u
int8_t size>
16 static_assert(size == 3 || size == 5 ||
17 size == 6 || size == 7 ||
18 size == 9 || size == 25
19 ,
"Only 3, 5, 6, 7, 9, 25 are supported" );
23 for (uint8_t i = 0; i < size-1; i++)
28 V[size-1] = B[size-1] = val;
42 sort(B[0], B[1]); sort(B[3], B[4]); sort(B[0], B[3]);
43 sort(B[1], B[4]); sort(B[1], B[2]); sort(B[2], B[3]);
49 sort(B[1], B[2]); sort(B[3],B[4]);
50 sort(B[0], B[1]); sort(B[2],B[3]); sort(B[4],B[5]);
51 sort(B[1], B[2]); sort(B[3],B[4]);
52 sort(B[0], B[1]); sort(B[2],B[3]); sort(B[4],B[5]);
53 sort(B[1], B[2]); sort(B[3],B[4]);
54 return (B[2] + B[3]) / 2;
58 sort(B[0], B[5]); sort(B[0], B[3]); sort(B[1], B[6]);
59 sort(B[2], B[4]); sort(B[0], B[1]); sort(B[3], B[5]);
60 sort(B[2], B[6]); sort(B[2], B[3]); sort(B[3], B[6]);
61 sort(B[4], B[5]); sort(B[1], B[4]); sort(B[1], B[3]);
67 sort(B[1], B[2]); sort(B[4], B[5]); sort(B[7], B[8]);
68 sort(B[0], B[1]); sort(B[3], B[4]); sort(B[6], B[7]);
69 sort(B[1], B[2]); sort(B[4], B[5]); sort(B[7], B[8]);
70 sort(B[0], B[3]); sort(B[5], B[8]); sort(B[4], B[7]);
71 sort(B[3], B[6]); sort(B[1], B[4]); sort(B[2], B[5]);
72 sort(B[4], B[7]); sort(B[4], B[2]); sort(B[6], B[4]);
78 sort(B[0], B[1]); sort(B[3], B[4]); sort(B[2], B[4]);
79 sort(B[2], B[3]); sort(B[6], B[7]); sort(B[5], B[7]);
80 sort(B[5], B[6]); sort(B[9], B[10]); sort(B[8], B[10]);
81 sort(B[8], B[9]); sort(B[12], B[13]); sort(B[11], B[13]);
82 sort(B[11], B[12]); sort(B[15], B[16]); sort(B[14], B[16]);
83 sort(B[14], B[15]); sort(B[18], B[19]); sort(B[17], B[19]);
84 sort(B[17], B[18]); sort(B[21], B[22]); sort(B[20], B[22]);
85 sort(B[20], B[21]); sort(B[23], B[24]); sort(B[2], B[5]);
86 sort(B[3], B[6]); sort(B[0], B[6]); sort(B[0], B[3]);
87 sort(B[4], B[7]); sort(B[1], B[7]); sort(B[1], B[4]);
88 sort(B[11], B[14]); sort(B[8], B[14]); sort(B[8], B[11]);
89 sort(B[12], B[15]); sort(B[9], B[15]); sort(B[9], B[12]);
90 sort(B[13], B[16]); sort(B[10], B[16]); sort(B[10], B[13]);
91 sort(B[20], B[23]); sort(B[17], B[23]); sort(B[17], B[20]);
92 sort(B[21], B[24]); sort(B[18], B[24]); sort(B[18], B[21]);
93 sort(B[19], B[22]); sort(B[8], B[17]); sort(B[9], B[18]);
94 sort(B[0], B[18]); sort(B[0], B[9]); sort(B[10], B[19]);
95 sort(B[1], B[19]); sort(B[1], B[10]); sort(B[11], B[20]);
96 sort(B[2], B[20]); sort(B[2], B[11]); sort(B[12], B[21]);
97 sort(B[3], B[21]); sort(B[3], B[12]); sort(B[13], B[22]);
98 sort(B[4], B[22]); sort(B[4], B[13]); sort(B[14], B[23]);
99 sort(B[5], B[23]); sort(B[5], B[14]); sort(B[15], B[24]);
100 sort(B[6], B[24]); sort(B[6], B[15]); sort(B[7], B[16]);
101 sort(B[7], B[19]); sort(B[13], B[21]); sort(B[15], B[23]);
102 sort(B[7], B[13]); sort(B[7], B[15]); sort(B[1], B[9]);
103 sort(B[3], B[11]); sort(B[5], B[17]); sort(B[11], B[17]);
104 sort(B[9], B[17]); sort(B[4], B[10]); sort(B[6], B[12]);
105 sort(B[7], B[14]); sort(B[4], B[6]); sort(B[4], B[7]);
106 sort(B[12], B[14]); sort(B[10], B[14]); sort(B[6], B[7]);
107 sort(B[10], B[12]); sort(B[6], B[10]); sort(B[6], B[17]);
108 sort(B[12], B[17]); sort(B[7], B[17]); sort(B[7], B[10]);
109 sort(B[12], B[18]); sort(B[7], B[12]); sort(B[10], B[18]);
110 sort(B[12], B[20]); sort(B[10], B[20]); sort(B[10], B[12]);
121 constexpr
void sort(T& a, T& b)