#pragma once #include #include #include "../Defines.h" struct OctreeBuilderStatistics { public: unsigned8 levels; std::string type; double validCoordBuildtime; double depthPeelingTime; double finalizationTime; double totalTime; std::vector octreeNodesPerLevel; std::vector dagNodesPerLevel; OctreeBuilderStatistics(unsigned8 levels) { this->levels = levels; validCoordBuildtime = depthPeelingTime = finalizationTime = totalTime = 0; octreeNodesPerLevel = std::vector(levels + 1); dagNodesPerLevel = std::vector(levels + 1); } size_t GetOctreeNodeCount() const { size_t octreeNodeCount = 0; for (unsigned8 level = 0; level <= levels; level++) octreeNodeCount += octreeNodesPerLevel[level]; return octreeNodeCount; } size_t GetDAGNodeCount() const { size_t dagNodeCount = 0; for (unsigned8 level = 0; level <= levels; level++) dagNodeCount += dagNodesPerLevel[level]; return dagNodeCount; } long double GetCompression() const { return (long double)GetOctreeNodeCount() / (long double)GetDAGNodeCount(); } long double GetCompression(unsigned8 level) const { return (long double)octreeNodesPerLevel[level] / (long double)dagNodesPerLevel[level]; } void Print() const { printf("DAG created with the following properties:\n"); printf("Total time : %10u ms\n", (unsigned)(totalTime * 1000)); printf("Valid subtree calculation time : %10u ms\n", (unsigned)(validCoordBuildtime * 1000)); printf("Depth peeling time : %10u ms\n", (unsigned)(depthPeelingTime * 1000)); printf("Subtree finalization time : %10u ms\n", (unsigned)(finalizationTime * 1000)); printf("Total nodes : %10zu\n", GetOctreeNodeCount()); printf("DAG nodes : %10zu\n", GetDAGNodeCount()); printf("Compression : %10.2Lf\n", GetCompression()); printf("\n"); printf("Statistics per level:\n"); printf("Level Octree (#) DAG (#) Compression\n"); for (unsigned8 level = 0; level <= levels; level++) printf("%5d %12zu %12zu %12.2Lf\n", level, octreeNodesPerLevel[level], dagNodesPerLevel[level], GetCompression(level)); } };