From f1c4fa9084969814478a07f7e7845bf8c752bd4b Mon Sep 17 00:00:00 2001
From: remicres <remi.cresson@teledetection.fr>
Date: Thu, 11 Aug 2016 13:14:54 +0000
Subject: [PATCH] ENH: now graphOperations use segmenter functions for memory
 computation

---
 include/lsgrmGraphOperations.h   |  2 +-
 include/lsgrmGraphOperations.txx | 47 +++++++++++++++++---------------
 2 files changed, 26 insertions(+), 23 deletions(-)

diff --git a/include/lsgrmGraphOperations.h b/include/lsgrmGraphOperations.h
index a0a9a10..ae7c6ad 100644
--- a/include/lsgrmGraphOperations.h
+++ b/include/lsgrmGraphOperations.h
@@ -145,7 +145,7 @@ void WriteGraph(typename TSegmenter::GraphType& graph,
     const unsigned int col);
 
 template<class TSegmenter>
-long long unsigned int GetGraphMemory(typename TSegmenter::GraphType& graph);
+long long unsigned int GetGraphMemory(TSegmenter segmenter);
 
 template<class TSegmenter>
 void RemoveUnstableSegments(typename TSegmenter::GraphType& graph,
diff --git a/include/lsgrmGraphOperations.txx b/include/lsgrmGraphOperations.txx
index 303ac46..d37e5aa 100644
--- a/include/lsgrmGraphOperations.txx
+++ b/include/lsgrmGraphOperations.txx
@@ -190,22 +190,22 @@ long long unsigned int RunPartialSegmentation(const typename TSegmenter::Paramet
         segmenter.SetDoBFSegmentation(false);
         segmenter.SetNumberOfIterations(niter);
 
-        std::cout << "\tPartial segmentation.." << std::endl;
+        std::cout << "\tPartial segmentation";
         auto merge = lsrm::GraphOperations<TSegmenter>::PerfomAllIterationsWithLMBFAndConstThreshold(segmenter);
 
         if(merge == true)
           isFusion = true;
 
-        std::cout << "\tRemove unstable segments..." << std::endl;
-
         // Remove unstable segments
+        std::cout << "\tRemove unstable segments..." << std::endl;
         RemoveUnstableSegments<TSegmenter>(segmenter.m_Graph, tiles[row*nbTilesX + col], imageWidth);
 
         // Retrieve the amount of memory to store this graph
-        accumulatedMemory += GetGraphMemory<TSegmenter>(segmenter.m_Graph);
+        std::cout << "\tGet graph memory..." << std::endl;
+        accumulatedMemory += GetGraphMemory<TSegmenter>(segmenter);
 
-        std::cout << "\tWrite graph..." << std::endl;
         // Write graph to temporay directory (warning specific to Baatz & Schape !!!)
+        std::cout << "\tWrite graph..." << std::endl;
         WriteGraph<TSegmenter>(segmenter.m_Graph, tmpDir, row, col);
         }
       }
@@ -717,7 +717,7 @@ long long unsigned int RunFirstPartialSegmentation(
         {
         // Reading images
         ProcessingTile currentTile = tiles[row*nbTilesX + col];
-        std::cout << "Processing tile " << row*nbTilesX + col <<
+        std::cout << "Processing tile " <<  (row*nbTilesX + col) << " / " << (nbTilesX*nbTilesY) <<
             " (" << col << ", " << row << ")" <<
             " start: [" << currentTile.region.GetIndex()[0] << ", " << currentTile.region.GetIndex()[1] <<
             "] size: [" << currentTile.region.GetSize()[0] << ", " << currentTile.region.GetSize()[1] << "]" << std::endl;
@@ -753,7 +753,7 @@ long long unsigned int RunFirstPartialSegmentation(
 
         // Retrieve the amount of memory to store this graph
         std::cout << "\tRetrieving graph memory..." << std::endl;
-        accumulatedMemory += GetGraphMemory<TSegmenter>(segmenter.m_Graph);
+        accumulatedMemory += GetGraphMemory<TSegmenter>(segmenter);
 
         // Write graph to temporay directory (warning specific to Baatz & Schape !!!)
         std::cout << "\tWriting graph..." << std::endl;
@@ -1134,23 +1134,26 @@ void WriteGraph(typename TSegmenter::GraphType& graph,
 }
 
 template<class TSegmenter>
-long long unsigned int GetGraphMemory(typename TSegmenter::GraphType& graph)
+long long unsigned int GetGraphMemory(TSegmenter segmenter)
 {
-  long long unsigned int memory = 0;
-  long unsigned int numberOfMoves = 0;
-
-  // Amount of memory needed to store the nodes
-  memory += graph.m_Nodes.size() * (sizeof(*graph.m_Nodes.begin()) + sizeof(graph.m_Nodes.begin()) + 4 * sizeof(float));
-
-  for(auto& node : graph.m_Nodes)
-    {
-    memory += node->m_Edges.size() * (sizeof(*node->m_Edges.begin()) + sizeof(node->m_Edges.begin()));
-    numberOfMoves += node->m_Contour.size();
-    }
-
-  memory += std::ceil(numberOfMoves / 4);
+//  TSegmenter::GraphType graph = segmenter.graph;
+//  long long unsigned int memory = 0;
+//  long unsigned int numberOfMoves = 0;
+//
+//  // Amount of memory needed to store the nodes
+//  memory += graph.m_Nodes.size() * (sizeof(*graph.m_Nodes.begin()) + sizeof(graph.m_Nodes.begin()) + 4 * sizeof(float));
+//
+//  for(auto& node : graph.m_Nodes)
+//    {
+//    memory += node->m_Edges.size() * (sizeof(*node->m_Edges.begin()) + sizeof(node->m_Edges.begin()));
+//    numberOfMoves += node->m_Contour.size();
+//    }
+//
+//  memory += std::ceil(numberOfMoves / 4);
+//
+//  return memory;
 
-  return memory;
+  return segmenter.GetGraphMemory();
 }
 
 template<class TSegmenter>
-- 
GitLab