View difference between Paste ID: ieyh8CRT and 8jG62xX7
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)