/src/cairo/src/cairo-combsort-inline.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright © 2008 Chris Wilson |
3 | | * |
4 | | * This library is free software; you can redistribute it and/or |
5 | | * modify it either under the terms of the GNU Lesser General Public |
6 | | * License version 2.1 as published by the Free Software Foundation |
7 | | * (the "LGPL") or, at your option, under the terms of the Mozilla |
8 | | * Public License Version 1.1 (the "MPL"). If you do not alter this |
9 | | * notice, a recipient may use your version of this file under either |
10 | | * the MPL or the LGPL. |
11 | | * |
12 | | * You should have received a copy of the LGPL along with this library |
13 | | * in the file COPYING-LGPL-2.1; if not, write to the Free Software |
14 | | * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA |
15 | | * You should have received a copy of the MPL along with this library |
16 | | * in the file COPYING-MPL-1.1 |
17 | | * |
18 | | * The contents of this file are subject to the Mozilla Public License |
19 | | * Version 1.1 (the "License"); you may not use this file except in |
20 | | * compliance with the License. You may obtain a copy of the License at |
21 | | * http://www.mozilla.org/MPL/ |
22 | | * |
23 | | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY |
24 | | * OF ANY KIND, either express or implied. See the LGPL or the MPL for |
25 | | * the specific language governing rights and limitations. |
26 | | * |
27 | | * The Original Code is the cairo graphics library. |
28 | | * |
29 | | * The Initial Developer of the Original Code is Chris Wilson |
30 | | * |
31 | | * Contributor(s): |
32 | | * Chris Wilson <chris@chris-wilson.co.uk> |
33 | | */ |
34 | | |
35 | | /* This fragment implements a comb sort (specifically combsort11) */ |
36 | | #ifndef _HAVE_CAIRO_COMBSORT_NEWGAP |
37 | | #define _HAVE_CAIRO_COMBSORT_NEWGAP |
38 | | static inline unsigned int |
39 | | _cairo_combsort_newgap (unsigned int gap) |
40 | 30.7k | { |
41 | 30.7k | gap = 10 * gap / 13; |
42 | 30.7k | if (gap == 9 || gap == 10) |
43 | 441 | gap = 11; |
44 | 30.7k | if (gap < 1) |
45 | 3.89k | gap = 1; |
46 | 30.7k | return gap; |
47 | 30.7k | } Unexecuted instantiation: cairo-recording-surface.c:_cairo_combsort_newgap cairo-bentley-ottmann-rectangular.c:_cairo_combsort_newgap Line | Count | Source | 40 | 3.77k | { | 41 | 3.77k | gap = 10 * gap / 13; | 42 | 3.77k | if (gap == 9 || gap == 10) | 43 | 199 | gap = 11; | 44 | 3.77k | if (gap < 1) | 45 | 605 | gap = 1; | 46 | 3.77k | return gap; | 47 | 3.77k | } |
cairo-bentley-ottmann-rectilinear.c:_cairo_combsort_newgap Line | Count | Source | 40 | 2.89k | { | 41 | 2.89k | gap = 10 * gap / 13; | 42 | 2.89k | if (gap == 9 || gap == 10) | 43 | 6 | gap = 11; | 44 | 2.89k | if (gap < 1) | 45 | 347 | gap = 1; | 46 | 2.89k | return gap; | 47 | 2.89k | } |
Unexecuted instantiation: cairo-bentley-ottmann.c:_cairo_combsort_newgap Unexecuted instantiation: cairo-boxes-intersect.c:_cairo_combsort_newgap Unexecuted instantiation: cairo-contour.c:_cairo_combsort_newgap cairo-polygon-intersect.c:_cairo_combsort_newgap Line | Count | Source | 40 | 21.2k | { | 41 | 21.2k | gap = 10 * gap / 13; | 42 | 21.2k | if (gap == 9 || gap == 10) | 43 | 180 | gap = 11; | 44 | 21.2k | if (gap < 1) | 45 | 2.63k | gap = 1; | 46 | 21.2k | return gap; | 47 | 21.2k | } |
cairo-polygon-reduce.c:_cairo_combsort_newgap Line | Count | Source | 40 | 1.92k | { | 41 | 1.92k | gap = 10 * gap / 13; | 42 | 1.92k | if (gap == 9 || gap == 10) | 43 | 56 | gap = 11; | 44 | 1.92k | if (gap < 1) | 45 | 177 | gap = 1; | 46 | 1.92k | return gap; | 47 | 1.92k | } |
cairo-rectangular-scan-converter.c:_cairo_combsort_newgap Line | Count | Source | 40 | 886 | { | 41 | 886 | gap = 10 * gap / 13; | 42 | 886 | if (gap == 9 || gap == 10) | 43 | 0 | gap = 11; | 44 | 886 | if (gap < 1) | 45 | 126 | gap = 1; | 46 | 886 | return gap; | 47 | 886 | } |
|
48 | | #endif |
49 | | |
50 | | #define CAIRO_COMBSORT_DECLARE(NAME, TYPE, CMP) \ |
51 | | static void \ |
52 | 4.30k | NAME (TYPE *base, unsigned int nmemb) \ |
53 | 4.30k | { \ |
54 | 4.30k | unsigned int gap = nmemb; \ |
55 | 4.30k | unsigned int i, j; \ |
56 | 4.30k | int swapped; \ |
57 | 30.7k | do { \ |
58 | 30.7k | gap = _cairo_combsort_newgap (gap); \ |
59 | 30.7k | swapped = gap > 1; \ |
60 | 38.7M | for (i = 0; i < nmemb-gap ; i++) { \ |
61 | 38.7M | j = i + gap; \ |
62 | 38.7M | if (CMP (base[i], base[j]) > 0 ) { \ |
63 | 2.84M | TYPE tmp; \ |
64 | 2.84M | tmp = base[i]; \ |
65 | 2.84M | base[i] = base[j]; \ |
66 | 2.84M | base[j] = tmp; \ |
67 | 2.84M | swapped = 1; \ |
68 | 2.84M | } \ |
69 | 38.7M | } \ |
70 | 30.7k | } while (swapped); \ |
71 | 4.30k | } Unexecuted instantiation: cairo-recording-surface.c:sort_indices cairo-bentley-ottmann-rectangular.c:_rectangle_sort Line | Count | Source | 52 | 729 | NAME (TYPE *base, unsigned int nmemb) \ | 53 | 729 | { \ | 54 | 729 | unsigned int gap = nmemb; \ | 55 | 729 | unsigned int i, j; \ | 56 | 729 | int swapped; \ | 57 | 3.77k | do { \ | 58 | 3.77k | gap = _cairo_combsort_newgap (gap); \ | 59 | 3.77k | swapped = gap > 1; \ | 60 | 78.1k | for (i = 0; i < nmemb-gap ; i++) { \ | 61 | 74.3k | j = i + gap; \ | 62 | 74.3k | if (CMP (base[i], base[j]) > 0 ) { \ | 63 | 7.96k | TYPE tmp; \ | 64 | 7.96k | tmp = base[i]; \ | 65 | 7.96k | base[i] = base[j]; \ | 66 | 7.96k | base[j] = tmp; \ | 67 | 7.96k | swapped = 1; \ | 68 | 7.96k | } \ | 69 | 74.3k | } \ | 70 | 3.77k | } while (swapped); \ | 71 | 729 | } |
cairo-bentley-ottmann-rectilinear.c:_cairo_bo_event_queue_sort Line | Count | Source | 52 | 347 | NAME (TYPE *base, unsigned int nmemb) \ | 53 | 347 | { \ | 54 | 347 | unsigned int gap = nmemb; \ | 55 | 347 | unsigned int i, j; \ | 56 | 347 | int swapped; \ | 57 | 2.89k | do { \ | 58 | 2.89k | gap = _cairo_combsort_newgap (gap); \ | 59 | 2.89k | swapped = gap > 1; \ | 60 | 64.9k | for (i = 0; i < nmemb-gap ; i++) { \ | 61 | 62.0k | j = i + gap; \ | 62 | 62.0k | if (CMP (base[i], base[j]) > 0 ) { \ | 63 | 13.3k | TYPE tmp; \ | 64 | 13.3k | tmp = base[i]; \ | 65 | 13.3k | base[i] = base[j]; \ | 66 | 13.3k | base[j] = tmp; \ | 67 | 13.3k | swapped = 1; \ | 68 | 13.3k | } \ | 69 | 62.0k | } \ | 70 | 2.89k | } while (swapped); \ | 71 | 347 | } |
Unexecuted instantiation: cairo-bentley-ottmann.c:_cairo_bo_event_queue_sort Unexecuted instantiation: cairo-boxes-intersect.c:_rectangle_sort cairo-polygon-intersect.c:_cairo_bo_event_queue_sort Line | Count | Source | 52 | 2.75k | NAME (TYPE *base, unsigned int nmemb) \ | 53 | 2.75k | { \ | 54 | 2.75k | unsigned int gap = nmemb; \ | 55 | 2.75k | unsigned int i, j; \ | 56 | 2.75k | int swapped; \ | 57 | 21.2k | do { \ | 58 | 21.2k | gap = _cairo_combsort_newgap (gap); \ | 59 | 21.2k | swapped = gap > 1; \ | 60 | 26.7M | for (i = 0; i < nmemb-gap ; i++) { \ | 61 | 26.7M | j = i + gap; \ | 62 | 26.7M | if (CMP (base[i], base[j]) > 0 ) { \ | 63 | 1.80M | TYPE tmp; \ | 64 | 1.80M | tmp = base[i]; \ | 65 | 1.80M | base[i] = base[j]; \ | 66 | 1.80M | base[j] = tmp; \ | 67 | 1.80M | swapped = 1; \ | 68 | 1.80M | } \ | 69 | 26.7M | } \ | 70 | 21.2k | } while (swapped); \ | 71 | 2.75k | } |
cairo-polygon-reduce.c:_cairo_bo_event_queue_sort Line | Count | Source | 52 | 144 | NAME (TYPE *base, unsigned int nmemb) \ | 53 | 144 | { \ | 54 | 144 | unsigned int gap = nmemb; \ | 55 | 144 | unsigned int i, j; \ | 56 | 144 | int swapped; \ | 57 | 1.92k | do { \ | 58 | 1.92k | gap = _cairo_combsort_newgap (gap); \ | 59 | 1.92k | swapped = gap > 1; \ | 60 | 11.3M | for (i = 0; i < nmemb-gap ; i++) { \ | 61 | 11.3M | j = i + gap; \ | 62 | 11.3M | if (CMP (base[i], base[j]) > 0 ) { \ | 63 | 965k | TYPE tmp; \ | 64 | 965k | tmp = base[i]; \ | 65 | 965k | base[i] = base[j]; \ | 66 | 965k | base[j] = tmp; \ | 67 | 965k | swapped = 1; \ | 68 | 965k | } \ | 69 | 11.3M | } \ | 70 | 1.92k | } while (swapped); \ | 71 | 144 | } |
cairo-rectangular-scan-converter.c:rectangle_sort Line | Count | Source | 52 | 332 | NAME (TYPE *base, unsigned int nmemb) \ | 53 | 332 | { \ | 54 | 332 | unsigned int gap = nmemb; \ | 55 | 332 | unsigned int i, j; \ | 56 | 332 | int swapped; \ | 57 | 886 | do { \ | 58 | 886 | gap = _cairo_combsort_newgap (gap); \ | 59 | 886 | swapped = gap > 1; \ | 60 | 567k | for (i = 0; i < nmemb-gap ; i++) { \ | 61 | 566k | j = i + gap; \ | 62 | 566k | if (CMP (base[i], base[j]) > 0 ) { \ | 63 | 59.8k | TYPE tmp; \ | 64 | 59.8k | tmp = base[i]; \ | 65 | 59.8k | base[i] = base[j]; \ | 66 | 59.8k | base[j] = tmp; \ | 67 | 59.8k | swapped = 1; \ | 68 | 59.8k | } \ | 69 | 566k | } \ | 70 | 886 | } while (swapped); \ | 71 | 332 | } |
|
72 | | |
73 | | #define CAIRO_COMBSORT_DECLARE_WITH_DATA(NAME, TYPE, CMP) \ |
74 | | static void \ |
75 | 0 | NAME (TYPE *base, unsigned int nmemb, void *data) \ |
76 | 0 | { \ |
77 | 0 | unsigned int gap = nmemb; \ |
78 | 0 | unsigned int i, j; \ |
79 | 0 | int swapped; \ |
80 | 0 | do { \ |
81 | 0 | gap = _cairo_combsort_newgap (gap); \ |
82 | 0 | swapped = gap > 1; \ |
83 | 0 | for (i = 0; i < nmemb-gap ; i++) { \ |
84 | 0 | j = i + gap; \ |
85 | 0 | if (CMP (base[i], base[j], data) > 0 ) { \ |
86 | 0 | TYPE tmp; \ |
87 | 0 | tmp = base[i]; \ |
88 | 0 | base[i] = base[j]; \ |
89 | 0 | base[j] = tmp; \ |
90 | 0 | swapped = 1; \ |
91 | 0 | } \ |
92 | 0 | } \ |
93 | 0 | } while (swapped); \ |
94 | 0 | } |