refactor leastsq into complexity
diff --git a/include/benchmark/complexity.h b/include/benchmark/complexity.h
index 93b26de..1c9f591 100644
--- a/include/benchmark/complexity.h
+++ b/include/benchmark/complexity.h
@@ -1,7 +1,26 @@
+// Copyright 2016 Ismael Jimenez Martinez. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Source project : https://github.com/ismaelJimenez/cpp.leastsq
+// Adapted to be used with google benchmark
+
 #ifndef COMPLEXITY_H_
 #define COMPLEXITY_H_
 
 #include <string>
+#include <vector>
+#include <functional>
 
 namespace benchmark {
 
@@ -19,24 +38,34 @@
   oAuto
 };
 
-inline std::string GetBigO(BigO complexity) {
-  switch (complexity) {
-    case oN:
-      return "* N";
-    case oNSquared:
-      return "* N**2";
-    case oNCubed:
-      return "* N**3";
-    case oLogN:
-      return "* lgN";
-    case oNLogN:
-      return "* NlgN";
-    case o1:
-      return "* 1";
-    default:
-      return "";
-  }
-}
+// This data structure will contain the result returned by MinimalLeastSq
+//   - coef        : Estimated coeficient for the high-order term as
+//                   interpolated from data.
+//   - rms         : Normalized Root Mean Squared Error.
+//   - complexity  : Scalability form (e.g. oN, oNLogN). In case a scalability
+//                   form has been provided to MinimalLeastSq this will return
+//                   the same value. In case BigO::oAuto has been selected, this
+//                   parameter will return the best fitting curve detected.
+
+struct LeastSq {
+  LeastSq() :
+    coef(0),
+    rms(0),
+    complexity(benchmark::oNone) {}
+
+  double coef;
+  double rms;
+  benchmark::BigO complexity;
+};
+
+// Function to to return an string for the calculated complexity
+std::string GetBigOString(benchmark::BigO complexity);
+
+// Find the coefficient for the high-order term in the running time, by
+// minimizing the sum of squares of relative error.
+LeastSq MinimalLeastSq(const std::vector<int>& n,
+                       const std::vector<double>& time,
+                       const benchmark::BigO complexity = benchmark::oAuto);
 
 } // end namespace benchmark
 #endif // COMPLEXITY_H_
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index a681b35..6dab64b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -5,7 +5,7 @@
 set(SOURCE_FILES "benchmark.cc" "colorprint.cc" "commandlineflags.cc"
                  "console_reporter.cc" "csv_reporter.cc" "json_reporter.cc"
                  "log.cc" "reporter.cc" "sleep.cc" "string_util.cc"
-                 "sysinfo.cc" "walltime.cc" "minimal_leastsq.cc")
+                 "sysinfo.cc" "walltime.cc" "complexity.cc")
 # Determine the correct regular expression engine to use
 if(HAVE_STD_REGEX)
   set(RE_FILES "re_std.cc")
diff --git a/src/minimal_leastsq.cc b/src/complexity.cc
similarity index 74%
rename from src/minimal_leastsq.cc
rename to src/complexity.cc
index d63e6f6..4d21af8 100644
--- a/src/minimal_leastsq.cc
+++ b/src/complexity.cc
@@ -15,43 +15,45 @@
 // Source project : https://github.com/ismaelJimenez/cpp.leastsq
 // Adapted to be used with google benchmark
 
-#include "minimal_leastsq.h"
+#include "benchmark/complexity.h"
 #include "check.h"
 #include <math.h>
 
+namespace benchmark {
+  
 // Internal function to calculate the different scalability forms
-std::function<double(int)> FittingCurve(benchmark::BigO complexity) {
+std::function<double(int)> FittingCurve(BigO complexity) {
   switch (complexity) {
-  case benchmark::oN:
+  case oN:
     return [](int n) {return n; };
-  case benchmark::oNSquared:
+  case oNSquared:
     return [](int n) {return n*n; };
-  case benchmark::oNCubed:
+  case oNCubed:
     return [](int n) {return n*n*n; };
-  case benchmark::oLogN:
+  case oLogN:
     return [](int n) {return log2(n); };
-  case benchmark::oNLogN:
+  case oNLogN:
     return [](int n) {return n * log2(n); };
-  case benchmark::o1:
+  case o1:
   default:
     return [](int) {return 1; };
   }
 }
 
-// Internal function to to return an string for the calculated complexity
-std::string GetBigOString(benchmark::BigO complexity) {
+// Function to to return an string for the calculated complexity
+std::string GetBigOString(BigO complexity) {
   switch (complexity) {
-    case benchmark::oN:
+    case oN:
       return "* N";
-    case benchmark::oNSquared:
+    case oNSquared:
       return "* N**2";
-    case benchmark::oNCubed:
+    case oNCubed:
       return "* N**3";
-    case benchmark::oLogN:
+    case oLogN:
       return "* lgN";
-    case benchmark::oNLogN:
+    case oNLogN:
       return "* NlgN";
-    case benchmark::o1:
+    case o1:
       return "* 1";
     default:
       return "";
@@ -65,6 +67,16 @@
 // For a deeper explanation on the algorithm logic, look the README file at
 // http://github.com/ismaelJimenez/Minimal-Cpp-Least-Squared-Fit
 
+// This interface is currently not used from the oustide, but it has been provided 
+// for future upgrades. If in the future it is not needed to support Cxx03, then 
+// all the calculations could be upgraded to use lambdas because they are more 
+// powerful and provide a cleaner inferface than enumerators, but complete 
+// implementation with lambdas will not work for Cxx03 (e.g. lack of std::function).
+// In case lambdas are implemented, the interface would be like :
+//   -> Complexity([](int n) {return n;};)
+// and any arbitrary and valid  equation would be allowed, but the option to calculate
+// the best fit to the most common scalability curves will still be kept.
+
 LeastSq CalculateLeastSq(const std::vector<int>& n, 
                          const std::vector<double>& time, 
                          std::function<double(int)> fitting_curve) {
@@ -110,22 +122,20 @@
 //                  fitting curve.
 LeastSq MinimalLeastSq(const std::vector<int>& n,
                        const std::vector<double>& time,
-                       const benchmark::BigO complexity) {
+                       const BigO complexity) {
   CHECK_EQ(n.size(), time.size());
   CHECK_GE(n.size(), 2);  // Do not compute fitting curve is less than two benchmark runs are given
-  CHECK_NE(complexity, benchmark::oNone);
+  CHECK_NE(complexity, oNone);
 
   LeastSq best_fit;
 
-  if(complexity == benchmark::oAuto) {
-    std::vector<benchmark::BigO> fit_curves = {
-      benchmark::oLogN, benchmark::oN, benchmark::oNLogN, benchmark::oNSquared,
-      benchmark::oNCubed };
+  if(complexity == oAuto) {
+    std::vector<BigO> fit_curves = {
+      oLogN, oN, oNLogN, oNSquared, oNCubed };
 
     // Take o1 as default best fitting curve
-    best_fit = CalculateLeastSq(n, time, FittingCurve(benchmark::o1));
-    best_fit.complexity = benchmark::o1;
-    best_fit.caption = GetBigOString(benchmark::o1);
+    best_fit = CalculateLeastSq(n, time, FittingCurve(o1));
+    best_fit.complexity = o1;
 
     // Compute all possible fitting curves and stick to the best one
     for (const auto& fit : fit_curves) {
@@ -133,14 +143,14 @@
       if (current_fit.rms < best_fit.rms) {
         best_fit = current_fit;
         best_fit.complexity = fit;
-        best_fit.caption = GetBigOString(fit);
       }
     }
   } else {
     best_fit = CalculateLeastSq(n, time, FittingCurve(complexity));
     best_fit.complexity = complexity;
-    best_fit.caption = GetBigOString(complexity);
   }
 
   return best_fit;
 }
+
+}  // end namespace benchmark
\ No newline at end of file
diff --git a/src/console_reporter.cc b/src/console_reporter.cc
index 41c00b9..da07519 100644
--- a/src/console_reporter.cc
+++ b/src/console_reporter.cc
@@ -117,7 +117,7 @@
               name_field_width_, result.benchmark_name.c_str());
 
   if(result.report_big_o) {
-    std::string big_o = result.report_big_o ? GetBigO(result.complexity) : "";
+    std::string big_o = result.report_big_o ? GetBigOString(result.complexity) : "";
     ColorPrintf(COLOR_YELLOW, "%10.4f %s %10.4f %s ",
                 result.real_accumulated_time * multiplier,
                 big_o.c_str(),
diff --git a/src/minimal_leastsq.h b/src/minimal_leastsq.h
deleted file mode 100644
index ee49ec9..0000000
--- a/src/minimal_leastsq.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2016 Ismael Jimenez Martinez. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Source project : https://github.com/ismaelJimenez/cpp.leastsq
-// Adapted to be used with google benchmark
-
-#if !defined(MINIMAL_LEASTSQ_H_)
-#define MINIMAL_LEASTSQ_H_
-
-#include "benchmark/benchmark_api.h"
-
-#include <vector>
-#include <functional>
-
-// This data structure will contain the result returned by MinimalLeastSq
-//   - coef        : Estimated coeficient for the high-order term as
-//                   interpolated from data.
-//   - rms         : Normalized Root Mean Squared Error.
-//   - complexity  : Scalability form (e.g. oN, oNLogN). In case a scalability
-//                   form has been provided to MinimalLeastSq this will return
-//                   the same value. In case BigO::oAuto has been selected, this
-//                   parameter will return the best fitting curve detected.
-
-struct LeastSq {
-  LeastSq() :
-    coef(0),
-    rms(0),
-    complexity(benchmark::oNone),
-    caption("") {}
-
-  double coef;
-  double rms;
-  benchmark::BigO complexity;
-  std::string caption;
-};
-
-// Find the coefficient for the high-order term in the running time, by
-// minimizing the sum of squares of relative error.
-LeastSq MinimalLeastSq(const std::vector<int>& n,
-                       const std::vector<double>& time,
-                       const benchmark::BigO complexity = benchmark::oAuto);
-
-// This interface is currently not used from the oustide, but it has been provided 
-// for future upgrades. If in the future it is not needed to support Cxx03, then 
-// all the calculations could be upgraded to use lambdas because they are more 
-// powerful and provide a cleaner inferface than enumerators, but complete 
-// implementation with lambdas will not work for Cxx03 (e.g. lack of std::function).
-// In case lambdas are implemented, the interface would be like :
-//   -> Complexity([](int n) {return n;};)
-// and any arbitrary and valid  equation would be allowed, but the option to calculate
-// the best fit to the most common scalability curves will still be kept.
-LeastSq CalculateLeastSq(const std::vector<int>& n, 
-                         const std::vector<double>& time, 
-                         std::function<double(int)> fitting_curve);
-
-
-#endif
diff --git a/src/reporter.cc b/src/reporter.cc
index 2830fa1..4fd0ba5 100644
--- a/src/reporter.cc
+++ b/src/reporter.cc
@@ -13,7 +13,6 @@
 // limitations under the License.
 
 #include "benchmark/reporter.h"
-#include "minimal_leastsq.h"
 
 #include <cstdlib>
 #include <vector>