Generalization of the inner iterations algorithm.

Add automatic recursive independent set decomposition.
Clean up the naming and the API for inner iterations.

Change-Id: I3d7d6babb9756842d7367e14b7279d2df98fb724
diff --git a/internal/ceres/solver_impl.h b/internal/ceres/solver_impl.h
index 140de95..dd40e41 100644
--- a/internal/ceres/solver_impl.h
+++ b/internal/ceres/solver_impl.h
@@ -35,15 +35,15 @@
 #include <vector>
 #include "ceres/internal/port.h"
 #include "ceres/ordered_groups.h"
-#include "ceres/solver.h"
 #include "ceres/problem_impl.h"
+#include "ceres/solver.h"
 
 namespace ceres {
 namespace internal {
 
+class CoordinateDescentMinimizer;
 class Evaluator;
 class LinearSolver;
-class InnerIterationMinimizer;
 class Program;
 
 class SolverImpl {
@@ -86,7 +86,7 @@
   // Reorder the residuals for program, if necessary, so that the
   // residuals involving e block (i.e., the first num_eliminate_block
   // parameter blocks) occur together. This is a necessary condition
-  // for the Schur eliminator as well as the InnerIterationMinimizer.
+  // for the Schur eliminator.
   static bool LexicographicallyOrderResidualBlocks(
       const int num_eliminate_blocks,
       Program* program,
@@ -102,7 +102,7 @@
   // Run the minimization for the given evaluator and configuration.
   static void Minimize(const Solver::Options &options,
                        Program* program,
-                       InnerIterationMinimizer* inner_iteration_minimizer,
+                       CoordinateDescentMinimizer* inner_iteration_minimizer,
                        Evaluator* evaluator,
                        LinearSolver* linear_solver,
                        double* parameters,
@@ -124,8 +124,8 @@
                               string* error);
 
   static bool IsParameterBlockSetIndependent(
-      const set<double*> parameter_block_ptrs,
-      const vector<ResidualBlock*> residual_blocks);
+      const set<double*>& parameter_block_ptrs,
+      const vector<ResidualBlock*>& residual_blocks);
 };
 
 }  // namespace internal