LCOV - code coverage report
Current view: top level - raid - helper.c (source / functions) Hit Total Coverage
Test: lcov.info Lines: 51 51 100.0 %
Date: 2026-04-29 15:04:44 Functions: 2 2 100.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-or-later
       2             : // Copyright (C) 2013 Andrea Mazzoleni
       3             : 
       4             : #include "internal.h"
       5             : 
       6             : #define RAID_SWAP(a, b) \
       7             :         do { \
       8             :                 if (v[a] > v[b]) { \
       9             :                         int t = v[a]; \
      10             :                         v[a] = v[b]; \
      11             :                         v[b] = t; \
      12             :                 } \
      13             :         } while (0)
      14             : 
      15       55986 : void raid_sort(int n, int *v)
      16             : {
      17             :         /* sorting networks generated with Batcher's Merge-Exchange */
      18       55986 :         switch (n) {
      19          36 :         case 2:
      20          36 :                 RAID_SWAP(0, 1);
      21          36 :                 break;
      22         216 :         case 3:
      23         216 :                 RAID_SWAP(0, 2);
      24         216 :                 RAID_SWAP(0, 1);
      25         216 :                 RAID_SWAP(1, 2);
      26         216 :                 break;
      27        1296 :         case 4:
      28        1296 :                 RAID_SWAP(0, 2);
      29        1296 :                 RAID_SWAP(1, 3);
      30        1296 :                 RAID_SWAP(0, 1);
      31        1296 :                 RAID_SWAP(2, 3);
      32        1296 :                 RAID_SWAP(1, 2);
      33        1296 :                 break;
      34        7776 :         case 5:
      35        7776 :                 RAID_SWAP(0, 4);
      36        7776 :                 RAID_SWAP(0, 2);
      37        7776 :                 RAID_SWAP(1, 3);
      38        7776 :                 RAID_SWAP(2, 4);
      39        7776 :                 RAID_SWAP(0, 1);
      40        7776 :                 RAID_SWAP(2, 3);
      41        7776 :                 RAID_SWAP(1, 4);
      42        7776 :                 RAID_SWAP(1, 2);
      43        7776 :                 RAID_SWAP(3, 4);
      44        7776 :                 break;
      45       46656 :         case 6:
      46       46656 :                 RAID_SWAP(0, 4);
      47       46656 :                 RAID_SWAP(1, 5);
      48       46656 :                 RAID_SWAP(0, 2);
      49       46656 :                 RAID_SWAP(1, 3);
      50       46656 :                 RAID_SWAP(2, 4);
      51       46656 :                 RAID_SWAP(3, 5);
      52       46656 :                 RAID_SWAP(0, 1);
      53       46656 :                 RAID_SWAP(2, 3);
      54       46656 :                 RAID_SWAP(4, 5);
      55       46656 :                 RAID_SWAP(1, 4);
      56       46656 :                 RAID_SWAP(1, 2);
      57       46656 :                 RAID_SWAP(3, 4);
      58       46656 :                 break;
      59             :         }
      60       55986 : }
      61             : 
      62      324726 : void raid_insert(int n, int *v, int i)
      63             : {
      64             :         /*
      65             :          * We don't use binary search because this is intended
      66             :          * for very small vectors and we want to optimize the case
      67             :          * of elements inserted already in order
      68             :          */
      69             : 
      70             :         /* insert at the end */
      71      324726 :         v[n] = i;
      72             : 
      73             :         /* swap until in the correct position */
      74      652251 :         while (n > 0 && v[n - 1] > v[n]) {
      75             :                 /* swap */
      76      327525 :                 int t = v[n - 1];
      77             : 
      78      327525 :                 v[n - 1] = v[n];
      79      327525 :                 v[n] = t;
      80             : 
      81             :                 /* previous position */
      82      327525 :                 --n;
      83             :         }
      84      324726 : }
      85             : 

Generated by: LCOV version 1.0