author | Hajime Tazaki <tazaki@nict.go.jp> |
Wed, 13 Feb 2013 22:37:34 +0900 | |
changeset 651 | 9d7e2cd9633b |
parent 540 | f2b7d02973a0 |
permissions | -rw-r--r-- |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1 |
#include "vdl-sort.h" |
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
2 |
#include "vdl-list.h" |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
3 |
#include "vdl-utils.h" |
540
f2b7d02973a0
split some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
529
diff
changeset
|
4 |
#include "vdl-file.h" |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
5 |
#include <stdint.h> |
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
6 |
|
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
7 |
static uint32_t |
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
8 |
get_max_depth (struct VdlList *files) |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
9 |
{ |
379
661bab436b34
handle cyclic dependencies
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
376
diff
changeset
|
10 |
uint32_t max_depth = 0; |
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
11 |
void **cur; |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
12 |
for (cur = vdl_list_begin (files); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
13 |
cur != vdl_list_end (files); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
14 |
cur = vdl_list_next (cur)) |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
15 |
{ |
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
16 |
struct VdlFile *file = *cur; |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
17 |
max_depth = vdl_utils_max (file->depth, |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
18 |
max_depth); |
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
19 |
} |
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
20 |
return max_depth; |
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
21 |
} |
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
22 |
|
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
23 |
struct VdlList * |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
24 |
vdl_sort_increasing_depth (struct VdlList *files) |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
25 |
{ |
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
26 |
uint32_t max_depth = get_max_depth (files); |
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
27 |
|
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
28 |
struct VdlList *output = vdl_list_new (); |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
29 |
|
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
30 |
uint32_t i; |
379
661bab436b34
handle cyclic dependencies
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
376
diff
changeset
|
31 |
for (i = 0; i <= max_depth; i++) |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
32 |
{ |
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
33 |
// find files with matching depth and output them |
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
34 |
void **cur; |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
35 |
for (cur = vdl_list_begin (files); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
36 |
cur != vdl_list_end (files); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
37 |
cur = vdl_list_next (cur)) |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
38 |
{ |
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
39 |
struct VdlFile *file = *cur; |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
40 |
if (file->depth == i) |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
41 |
{ |
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
42 |
vdl_list_push_back (output, file); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
43 |
} |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
44 |
} |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
45 |
} |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
46 |
return output; |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
47 |
} |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
48 |
|
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
49 |
struct VdlList *vdl_sort_deps_breadth_first (struct VdlFile *file) |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
50 |
{ |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
51 |
struct VdlList *sorted = vdl_list_new (); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
52 |
vdl_list_push_back (sorted, file); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
53 |
|
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
54 |
void **i; |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
55 |
for (i = vdl_list_begin (sorted); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
56 |
i != vdl_list_end (sorted); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
57 |
i = vdl_list_next (i)) |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
58 |
{ |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
59 |
struct VdlFile *item = *i; |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
60 |
void **j; |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
61 |
for (j = vdl_list_begin (item->deps); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
62 |
j != vdl_list_end (item->deps); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
63 |
j = vdl_list_next (j)) |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
64 |
{ |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
65 |
if (vdl_list_find (sorted, *j) == vdl_list_end (sorted)) |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
66 |
{ |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
67 |
// not found |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
68 |
vdl_list_push_back (sorted, *j); |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
69 |
} |
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
70 |
} |
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
71 |
} |
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
72 |
|
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
73 |
return sorted; |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
74 |
} |
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
75 |
|
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
76 |
struct VdlList *vdl_sort_call_init (struct VdlList *files) |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
77 |
{ |
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
78 |
struct VdlList *sorted = vdl_sort_increasing_depth (files); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
79 |
vdl_list_reverse (sorted); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
80 |
return sorted; |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
81 |
} |
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
82 |
struct VdlList *vdl_sort_call_fini (struct VdlList *files) |
343
d03feb8a706b
more more lock-safe
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
339
diff
changeset
|
83 |
{ |
529
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
84 |
struct VdlList *sorted = vdl_sort_increasing_depth (files); |
cccc081ed03d
get rid of VdlFileList
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
394
diff
changeset
|
85 |
return sorted; |
339
9f82c20058c5
make more use of the loaded/unloaded lists
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
86 |
} |