SHOW:
|
|
- or go back to the newest paste.
1 | Index: scenes/object-statistics.cpp | |
2 | =================================================================== | |
3 | - | --- scenes/object-statistics.cpp (revision 0) |
3 | + | --- scenes/object-statistics.cpp (revision 6693) |
4 | +++ scenes/object-statistics.cpp (working copy) | |
5 | - | @@ -0,0 +1,59 @@ |
5 | + | @@ -5,6 +5,39 @@ |
6 | - | +#include "edterrain_utils.h" |
6 | + | |
7 | REGISTER_FUNCTION_OPERATION("object-statistics", buildObjectStatisticsOperation, ""); | |
8 | - | +#include "edterrain4/landscape4/lReferenceFile.h" |
8 | + | |
9 | - | +#include "edterrain4/landscape5/scene5file.h" |
9 | + | + struct ReferenceStatistics |
10 | + { | |
11 | - | +REGISTER_FUNCTION_OPERATION("object-statistics", buildObjectStatisticsOperation, ""); |
11 | + | + unsigned referenceUsage; |
12 | + | |
13 | - | +void buildObjectStatisticsOperation(const ed::ConsoleArgs& args) |
13 | + | + ReferenceStatistics() : referenceUsage(0) {} |
14 | - | +{ |
14 | + | |
15 | - | + ed::string configFileName = args["-terrain"]; |
15 | + | + bool unused() const |
16 | - | + if (configFileName == "") |
16 | + | + { |
17 | - | + throw "Couldn't find \"-terrain\" console argument!"; |
17 | + | + return referenceUsage == 0; |
18 | + } | |
19 | - | + auto *terraDispatch = landscape4::CreateTerraDispatch(); |
19 | + | + }; |
20 | - | + if (!landscape4::GetTerraDispatch()->openTerrain(configFileName.c_str())) |
20 | + | |
21 | - | + throw "Failed to load terrain \"" + configFileName + "\""; |
21 | + | + struct ReferenceFileStatistics |
22 | + { | |
23 | - | + landscape4::GetTerraDispatch()->init("references"); |
23 | + | + mutable ed::map<const ed::string, ReferenceStatistics> referencesStatistics; |
24 | - | + landscape4::GetTerraDispatch()->init("scene"); |
24 | + | + ed::set<ed::string> referencesNames; |
25 | + | |
26 | - | + auto const& referenceFiles = terraDispatch->getReferenceFile(); |
26 | + | + void addReference(const ed::string& referenceName) |
27 | - | + auto const& scenes = terraDispatch->getScene(); |
27 | + | + { |
28 | - | + auto const& sceneModels = scenes.building_types; |
28 | + | + referencesNames.insert(referenceName); |
29 | - | + ed::map<ed::string, size_t> referencesUsage; |
29 | + | + } |
30 | - | + ed::set<ed::string> referencesNames; |
30 | + | |
31 | + void incrementReferenceUsage(const ed::string& referenceName) | |
32 | - | + for (auto const& referenceFile : referenceFiles) |
32 | + | + { |
33 | - | + { |
33 | + | + referencesStatistics[referenceName].referenceUsage++; |
34 | - | + auto const& references = referenceFile.references; |
34 | + | + } |
35 | - | + for (auto const& reference : references) |
35 | + | |
36 | - | + { |
36 | + | + bool unused(const ed::string& referenceName) const |
37 | - | + for (auto const& modelName : sceneModels) |
37 | + | + { |
38 | + return referencesStatistics[referenceName].unused(); | |
39 | - | + referencesNames.insert(reference.name); |
39 | + | + } |
40 | - | + if (modelName == reference.name) |
40 | + | + }; |
41 | - | + referencesUsage[modelName]++; |
41 | + | |
42 | void buildObjectStatisticsOperation(const ed::ConsoleArgs& args) | |
43 | - | + } |
43 | + | { |
44 | - | + } |
44 | + | ed::string configFileName = args["-terrain"]; |
45 | @@ -21,7 +54,7 @@ | |
46 | - | + bool unusedExists = false; |
46 | + | const auto& referenceFiles = terraDispatch->getReferenceFile(); |
47 | - | + for (auto const& referenceName : referencesNames) |
47 | + | const auto& scenes = terraDispatch->getScene(); |
48 | - | + { |
48 | + | const auto& sceneModels = scenes.building_types; |
49 | - | + if (referencesUsage[referenceName] == 0) |
49 | + | - ed::map<ed::string, ed::map<ed::string, unsigned>> referencesUsage; |
50 | - | + { |
50 | + | + ed::map<ed::string, ReferenceFileStatistics> referencesStatistics; |
51 | - | + if (!unusedExists) |
51 | + | |
52 | for (const auto& referenceFile : referenceFiles) | |
53 | - | + std::cout << std::colorRed << "Unused references:\n"; |
53 | + | { |
54 | - | + unusedExists = true; |
54 | + | @@ -28,27 +61,39 @@ |
55 | const auto& references = referenceFile.references; | |
56 | - | + std::cout << std::colorRed << referenceName << "\n"; |
56 | + | for (const auto& reference : references) |
57 | - | + } |
57 | + | { |
58 | - | + } |
58 | + | + referencesStatistics[referenceFile.getName()].addReference(reference.name); |
59 | for (const auto& modelName : sceneModels) | |
60 | - | + if (!unusedExists) |
60 | + | { |
61 | - | + std::cout << std::colorGreen << "All references are used\n"; |
61 | + | if (modelName == reference.name) |
62 | - referencesUsage[referenceFile.getName()][reference.name]++; | |
63 | - | + std::cout << std::colorWhite; |
63 | + | + referencesStatistics[referenceFile.getName()].incrementReferenceUsage(reference.name); |
64 | - | +} |
64 | + | } |
65 | - | \ No newline at end of file |
65 | + | } |
66 | } | |
67 | ||
68 | bool unusedExists = false; | |
69 | - for (const auto& referenceFile : referencesUsage) | |
70 | + for (const auto& referenceFileStatisticsIterator : referencesStatistics) | |
71 | { | |
72 | - if (!unusedExists) | |
73 | + bool hasUnused = false; | |
74 | + const auto& referenceFileStatistics = referenceFileStatisticsIterator.second; | |
75 | + for (const auto& referenceName : referenceFileStatistics.referencesNames) | |
76 | { | |
77 | - std::cout << std::colorRed << "Unused references:\n"; | |
78 | - unusedExists = true; | |
79 | + if (referenceFileStatistics.unused(referenceName)) | |
80 | + { | |
81 | + if (!unusedExists) | |
82 | + { | |
83 | + std::cout << std::colorRed << "Unused references:\n\n"; | |
84 | + unusedExists = true; | |
85 | + } | |
86 | + if (!hasUnused) | |
87 | + { | |
88 | + std::cout << std::colorWhite << referenceFileStatisticsIterator.first << ":\n"; | |
89 | + hasUnused = true; | |
90 | + } | |
91 | + std::cout << std::colorRed << referenceName << "\n"; | |
92 | + } | |
93 | } | |
94 | - std::cout << std::colorWhite << "\n" << referenceFile.first << ":\n"; | |
95 | - for (const auto& unusedReference : referencesUsage[referenceFile.first]) | |
96 | - { | |
97 | - std::cout << std::colorRed << unusedReference.first << "\n"; | |
98 | - } | |
99 | + if (hasUnused) | |
100 | + std::cout << "\n"; | |
101 | } | |
102 | ||
103 | if (!unusedExists) |