Mercurial > hg > Game > Cerium
annotate example/many_task/spe/QuickSort.cc @ 725:3a97fdd53a8e draft
Light data load fix (general load routine)
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 19 Dec 2009 15:02:43 +0900 |
parents | 0e91ddaad798 |
children | 53ad3a61b40b |
rev | line source |
---|---|
109 | 1 #include "QuickSort.h" |
2 #include <stdio.h> | |
3 #include <string.h> | |
233 | 4 #include "SpeProfile.h" |
109 | 5 |
6 SchedDefineTask(QuickSort); | |
7 | |
467
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
8 static void bubble_sort(DataPtr data, int begin, int end); |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
9 static void quick_sort(DataPtr data, int begin, int end); |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
10 |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
11 static void swap(Data *data, int left, int right); |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
12 |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
13 static int |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
14 run(SchedTask *smanager, void* rbuff, void* wbuff) { |
220 | 15 int begin = 0; |
626
0e91ddaad798
64bit mode compatibility on Cell
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
467
diff
changeset
|
16 int end = (long)smanager->get_param(0); |
316 | 17 DataPtr r_data = (DataPtr)smanager->get_input(0); |
18 DataPtr w_data = (DataPtr)smanager->get_output(0); | |
233 | 19 //SpeProfile *prof = new SpeProfile; |
109 | 20 |
233 | 21 //prof->ProfStart(); |
467
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
22 if (0) |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
23 bubble_sort(r_data, begin, end-1); |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
24 else |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
25 quick_sort(r_data, begin, end-1); |
109 | 26 memcpy(w_data, r_data, sizeof(Data)*end); |
233 | 27 //prof->ProfStop(); |
28 //prof->ProfPrint(); | |
220 | 29 |
233 | 30 //delete prof; |
109 | 31 return 0; |
32 } | |
33 | |
467
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
34 static void |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
35 bubble_sort(DataPtr data, int begin, int end) |
220 | 36 { |
37 for (int i = 0; i < end; i++) { | |
38 for (int j = end; j > i; j--) { | |
39 if (data[j].index < data[j-1].index) { | |
40 swap(data, j, j-1); | |
41 } | |
42 } | |
43 } | |
44 } | |
109 | 45 |
467
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
46 |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
47 static void |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
48 quick_sort(DataPtr data, int begin, int end) |
220 | 49 { |
109 | 50 if (begin < end) { |
220 | 51 |
109 | 52 int where = (begin + end) / 2; |
53 int pivot = data[where].index; | |
54 data[where].index = data[begin].index; | |
55 int p = begin; | |
220 | 56 |
57 for (int i = begin+1; i <= end; i++) { | |
109 | 58 if (data[i].index < pivot) { |
59 p++; | |
60 swap(data, p, i); | |
61 } | |
62 } | |
220 | 63 |
109 | 64 data[begin].index = data[p].index; |
65 data[p].index = pivot; | |
66 | |
67 quick_sort(data, begin, p-1); | |
68 quick_sort(data, p+1, end); | |
69 } | |
70 } | |
71 | |
467
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
72 |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
73 static void |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
74 swap(Data *data, int left, int right) |
109 | 75 { |
220 | 76 int tmp = data[left].index; |
109 | 77 data[left].index = data[right].index; |
78 data[right].index = tmp; | |
79 } | |
467
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
80 |
839e34d0cc3c
fix all examples. test_render is not working now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
356
diff
changeset
|
81 /* end */ |