Move from Ordering to ParameterBlockOrdering.

Change-Id: I9320afff13ee62be407c725f42f41a18f537bcc1
diff --git a/internal/ceres/solver_impl.cc b/internal/ceres/solver_impl.cc
index 4f914fa..c052aeb 100644
--- a/internal/ceres/solver_impl.cc
+++ b/internal/ceres/solver_impl.cc
@@ -41,7 +41,7 @@
 #include "ceres/linear_solver.h"
 #include "ceres/map_util.h"
 #include "ceres/minimizer.h"
-#include "ceres/ordering.h"
+#include "ceres/ordered_groups.h"
 #include "ceres/parameter_block.h"
 #include "ceres/problem.h"
 #include "ceres/problem_impl.h"
@@ -260,15 +260,15 @@
       LOG(WARNING) << summary->error;
       return;
     }
-    options.ordering = new Ordering(*original_options.ordering);
+    options.ordering = new ParameterBlockOrdering(*original_options.ordering);
   } else {
-    options.ordering = new Ordering;
+    options.ordering = new ParameterBlockOrdering;
     const ProblemImpl::ParameterMap& parameter_map =
         problem_impl->parameter_map();
     for (ProblemImpl::ParameterMap::const_iterator it = parameter_map.begin();
          it != parameter_map.end();
          ++it) {
-      options.ordering->AddParameterBlockToGroup(it->first, 0);
+      options.ordering->AddElementToGroup(it->first, 0);
     }
   }
 
@@ -334,7 +334,7 @@
   // Only Schur types require the lexicographic reordering.
   if (IsSchurType(options.linear_solver_type)) {
     const int num_eliminate_blocks =
-        options.ordering->group_id_to_parameter_blocks().begin()->second.size();
+        options.ordering->group_to_elements().begin()->second.size();
     if (!LexicographicallyOrderResidualBlocks(num_eliminate_blocks,
                                               reduced_program.get(),
                                               &summary->error)) {
@@ -415,7 +415,7 @@
 bool SolverImpl::IsOrderingValid(const Solver::Options& options,
                                  const ProblemImpl* problem_impl,
                                  string* error) {
-  if (options.ordering->NumParameterBlocks() !=
+  if (options.ordering->NumElements() !=
       problem_impl->NumParameterBlocks()) {
       *error = "Number of parameter blocks in user supplied ordering "
           "does not match the number of parameter blocks in the problem";
@@ -428,8 +428,7 @@
   for (vector<ParameterBlock*>::const_iterator it = parameter_blocks.begin();
        it != parameter_blocks.end();
        ++it) {
-    if (!options.ordering->ContainsParameterBlock(
-            const_cast<double*>((*it)->user_state()))) {
+    if (!options.ordering->IsMember(const_cast<double*>((*it)->user_state()))) {
       *error = "Problem contains a parameter block that is not in "
           "the user specified ordering.";
       return false;
@@ -439,7 +438,7 @@
   if (IsSchurType(options.linear_solver_type) &&
       options.ordering->NumGroups() > 1) {
     const set<double*>& e_blocks  =
-        options.ordering->group_id_to_parameter_blocks().begin()->second;
+        options.ordering->group_to_elements().begin()->second;
     if (!IsParameterBlockSetIndependent(e_blocks, residual_blocks)) {
       *error = "The user requested the use of a Schur type solver. "
           "But the first elimination group in the ordering is not an "
@@ -478,7 +477,7 @@
 // Strips varying parameters and residuals, maintaining order, and updating
 // num_eliminate_blocks.
 bool SolverImpl::RemoveFixedBlocksFromProgram(Program* program,
-                                              Ordering* ordering,
+                                              ParameterBlockOrdering* ordering,
                                               double* fixed_cost,
                                               string* error) {
   vector<ParameterBlock*>* parameter_blocks =
@@ -547,7 +546,7 @@
       if (parameter_block->index() == 1) {
         (*parameter_blocks)[j++] = parameter_block;
       } else {
-        ordering->RemoveParameterBlock(parameter_block->mutable_user_state());
+        ordering->Remove(parameter_block->mutable_user_state());
       }
     }
     parameter_blocks->resize(j);
@@ -568,10 +567,10 @@
   CHECK_NOTNULL(options->ordering);
   Program* original_program = problem_impl->mutable_program();
   scoped_ptr<Program> transformed_program(new Program(*original_program));
-  Ordering* ordering = options->ordering;
+  ParameterBlockOrdering* ordering = options->ordering;
 
   const int min_group_id =
-      ordering->group_id_to_parameter_blocks().begin()->first;
+      ordering->group_to_elements().begin()->first;
   const int original_num_groups = ordering->NumGroups();
 
   if (!RemoveFixedBlocksFromProgram(transformed_program.get(),
@@ -603,7 +602,7 @@
         << "to the developers.";
 
     for (int i = 0; i < schur_ordering.size(); ++i) {
-      ordering->AddParameterBlockToGroup(schur_ordering[i]->mutable_user_state(),
+      ordering->AddElementToGroup(schur_ordering[i]->mutable_user_state(),
                                          (i < num_eliminate_blocks) ? 0 : 1);
     }
   }
@@ -764,7 +763,7 @@
 
   linear_solver_options.use_block_amd = options->use_block_amd;
   const map<int, set<double*> >& groups =
-      options->ordering->group_id_to_parameter_blocks();
+      options->ordering->group_to_elements();
   for (map<int, set<double*> >::const_iterator it = groups.begin();
        it != groups.end();
        ++it) {
@@ -783,15 +782,15 @@
 }
 
 bool SolverImpl::ApplyUserOrdering(const ProblemImpl::ParameterMap& parameter_map,
-                                   const Ordering* ordering,
+                                   const ParameterBlockOrdering* ordering,
                                    Program* program,
                                    string* error) {
-  if (ordering->NumParameterBlocks() != program->NumParameterBlocks()) {
+  if (ordering->NumElements() != program->NumParameterBlocks()) {
     *error = StringPrintf("User specified ordering does not have the same "
                           "number of parameters as the problem. The problem"
                           "has %d blocks while the ordering has %d blocks.",
                           program->NumParameterBlocks(),
-                          ordering->NumParameterBlocks());
+                          ordering->NumElements());
     return false;
   }
 
@@ -800,7 +799,7 @@
   parameter_blocks->clear();
 
   const map<int, set<double*> >& groups =
-      ordering->group_id_to_parameter_blocks();
+      ordering->group_to_elements();
 
   for (map<int, set<double*> >::const_iterator group_it = groups.begin();
        group_it != groups.end();
@@ -934,7 +933,7 @@
   evaluator_options.num_eliminate_blocks =
       (options.ordering->NumGroups() > 0 &&
        IsSchurType(options.linear_solver_type))
-      ? options.ordering->group_id_to_parameter_blocks().begin()->second.size()
+      ? options.ordering->group_to_elements().begin()->second.size()
       : 0;
   evaluator_options.num_threads = options.num_threads;
   return Evaluator::Create(evaluator_options, program, error);