From 5486c8c85b9cfb92232518b2fadf6d8ed7b332d5 Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <boris@codesynthesis.com>
Date: Wed, 3 Jun 2015 21:35:43 +0200
Subject: [PATCH] Remove gratuitous classes

In the process also get rid of global class processor which conflicts
with enum processor on MIPS.

[Upstream: bbc39ffe31c67506b4c03fc56fa3adcb925b6325]
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
---
 odb/context.hxx              |  3 ++-
 odb/generator.cxx            | 24 ++++++++++++------------
 odb/generator.hxx            | 26 ++++++++------------------
 odb/plugin.cxx               | 18 +++++++-----------
 odb/processor.cxx            |  4 ++--
 odb/processor.hxx            | 22 ++++++----------------
 odb/relational/validator.cxx |  6 +++---
 odb/relational/validator.hxx | 29 +++++++++--------------------
 odb/validator.cxx            | 13 ++++++-------
 odb/validator.hxx            | 28 +++++++++-------------------
 10 files changed, 64 insertions(+), 109 deletions(-)

diff --git a/odb/context.hxx b/odb/context.hxx
index 1cf002a..351bc61 100644
--- a/odb/context.hxx
+++ b/odb/context.hxx
@@ -41,7 +41,8 @@ typedef cutl::re::format regex_format;
 
 typedef std::vector<regexsub> regex_mapping;
 
-//
+// Generic exception thrown to indicate a failure when diagnostics
+// has already been issued (to stderr).
 //
 class operation_failed {};
 
diff --git a/odb/generator.cxx b/odb/generator.cxx
index e165faf..6aa5151 100644
--- a/odb/generator.cxx
+++ b/odb/generator.cxx
@@ -58,7 +58,7 @@ namespace
     if (!ifs.is_open ())
     {
       cerr << "error: unable to open '" << p << "' in read mode" << endl;
-      throw generator::failed ();
+      throw generator_failed ();
     }
   }
 
@@ -70,7 +70,7 @@ namespace
     if (!ofs.is_open ())
     {
       cerr << "error: unable to open '" << p << "' in write mode" << endl;
-      throw generator::failed ();
+      throw generator_failed ();
     }
   }
 
@@ -118,7 +118,7 @@ namespace
   }
 }
 
-void generator::
+void
 generate (options const& ops,
           features& fts,
           semantics::unit& unit,
@@ -259,7 +259,7 @@ generate (options const& ops,
             cerr << in_log_path << ": error: wrong database '" <<
               old_changelog->database () << "', expected '" << db <<
               "'" << endl;
-            throw generator::failed ();
+            throw generator_failed ();
           }
 
           string sn (ops.schema_name ()[db]);
@@ -268,18 +268,18 @@ generate (options const& ops,
             cerr << in_log_path << ": error: wrong schema name '" <<
               old_changelog->schema_name () << "', expected '" << sn <<
               "'" << endl;
-            throw generator::failed ();
+            throw generator_failed ();
           }
         }
         catch (const ios_base::failure& e)
         {
           cerr << in_log_path << ": read failure" << endl;
-          throw failed ();
+          throw generator_failed ();
         }
         catch (const xml::parsing& e)
         {
           cerr << e.what () << endl;
-          throw failed ();
+          throw generator_failed ();
         }
       }
 
@@ -976,12 +976,12 @@ generate (options const& ops,
       catch (const ios_base::failure& e)
       {
         cerr << out_log_path << ": write failure" << endl;
-        throw failed ();
+        throw generator_failed ();
       }
       catch (const xml::serialization& e)
       {
         cerr << e.what () << endl;
-        throw failed ();
+        throw generator_failed ();
       }
     }
 
@@ -998,18 +998,18 @@ generate (options const& ops,
   {
     // Code generation failed. Diagnostics has already been issued.
     //
-    throw failed ();
+    throw generator_failed ();
   }
   catch (semantics::invalid_path const& e)
   {
     cerr << "error: '" << e.path () << "' is not a valid filesystem path"
          << endl;
-    throw failed ();
+    throw generator_failed ();
   }
   catch (fs::error const&)
   {
     // Auto-removal of generated files failed. Ignore it.
     //
-    throw failed ();
+    throw generator_failed ();
   }
 }
diff --git a/odb/generator.hxx b/odb/generator.hxx
index ce49295..e83d94d 100644
--- a/odb/generator.hxx
+++ b/odb/generator.hxx
@@ -11,23 +11,13 @@
 #include <odb/features.hxx>
 #include <odb/semantics/unit.hxx>
 
-class generator
-{
-public:
-  class failed {};
-
-  void
-  generate (options const&,
-            features&,
-            semantics::unit&,
-            semantics::path const& file,
-            std::vector<semantics::path> const& inputs);
-
-  generator () {}
-
-private:
-  generator (generator const&);
-  generator& operator= (generator const&);
-};
+class generator_failed {};
+
+void
+generate (options const&,
+          features&,
+          semantics::unit&,
+          semantics::path const& file,
+          std::vector<semantics::path> const& inputs);
 
 #endif // ODB_GENERATOR_HXX
diff --git a/odb/plugin.cxx b/odb/plugin.cxx
index e32f225..51f0cb1 100644
--- a/odb/plugin.cxx
+++ b/odb/plugin.cxx
@@ -199,27 +199,23 @@ gate_callback (void*, void*)
     parser p (*options_, loc_pragmas_, ns_loc_pragmas_, decl_pragmas_);
     auto_ptr<unit> u (p.parse (global_namespace, file_));
 
-
     features f;
 
     // Validate, pass 1.
     //
-    validator v;
-    v.validate (*options_, f, *u, file_, 1);
+    validate (*options_, f, *u, file_, 1);
 
     // Process.
     //
-    processor pr;
-    pr.process (*options_, f, *u, file_);
+    process (*options_, f, *u, file_);
 
     // Validate, pass 2.
     //
-    v.validate (*options_, f, *u, file_, 2);
+    validate (*options_, f, *u, file_, 2);
 
     // Generate.
     //
-    generator g;
-    g.generate (*options_, f, *u, file_, inputs_);
+    generate (*options_, f, *u, file_, inputs_);
   }
   catch (cutl::re::format const& e)
   {
@@ -239,19 +235,19 @@ gate_callback (void*, void*)
     //
     r = 1;
   }
-  catch (validator::failed const&)
+  catch (validator_failed const&)
   {
     // Diagnostics has aready been issued.
     //
     r = 1;
   }
-  catch (processor::failed const&)
+  catch (processor_failed const&)
   {
     // Diagnostics has aready been issued.
     //
     r = 1;
   }
-  catch (generator::failed const&)
+  catch (generator_failed const&)
   {
     // Diagnostics has aready been issued.
     //
diff --git a/odb/processor.cxx b/odb/processor.cxx
index a808a52..3a2cb1d 100644
--- a/odb/processor.cxx
+++ b/odb/processor.cxx
@@ -3064,7 +3064,7 @@ namespace
   };
 }
 
-void processor::
+void
 process (options const& ops,
          features& f,
          semantics::unit& unit,
@@ -3120,6 +3120,6 @@ process (options const& ops,
   {
     // Processing failed. Diagnostics has already been issued.
     //
-    throw failed ();
+    throw processor_failed ();
   }
 }
diff --git a/odb/processor.hxx b/odb/processor.hxx
index 602b999..e62dd25 100644
--- a/odb/processor.hxx
+++ b/odb/processor.hxx
@@ -9,22 +9,12 @@
 #include <odb/features.hxx>
 #include <odb/semantics/unit.hxx>
 
-class processor
-{
-public:
-  class failed {};
+class processor_failed {};
 
-  void
-  process (options const&,
-           features&,
-           semantics::unit&,
-           semantics::path const&);
-
-  processor () {}
-
-private:
-  processor (processor const&);
-  processor& operator= (processor const&);
-};
+void
+process (options const&,
+         features&,
+         semantics::unit&,
+         semantics::path const&);
 
 #endif // ODB_PROCESSOR_HXX
diff --git a/odb/relational/validator.cxx b/odb/relational/validator.cxx
index 1d51c9a..47f089c 100644
--- a/odb/relational/validator.cxx
+++ b/odb/relational/validator.cxx
@@ -528,7 +528,7 @@ namespace relational
     };
   }
 
-  void validator::
+  void
   validate (options const&,
             features&,
             semantics::unit& u,
@@ -608,7 +608,7 @@ namespace relational
     }
 
     if (!valid)
-      throw failed ();
+      throw operation_failed ();
 
     if (pass == 1)
     {
@@ -636,6 +636,6 @@ namespace relational
     }
 
     if (!valid)
-      throw failed ();
+      throw operation_failed ();
   }
 }
diff --git a/odb/relational/validator.hxx b/odb/relational/validator.hxx
index f0ede53..93360c3 100644
--- a/odb/relational/validator.hxx
+++ b/odb/relational/validator.hxx
@@ -11,26 +11,15 @@
 
 namespace relational
 {
-  class validator
-  {
-  public:
-    struct failed {};
-
-    // The first pass is performed before processing. The second -- after.
-    //
-    void
-    validate (options const&,
-              features&,
-              semantics::unit&,
-              semantics::path const&,
-              unsigned short pass);
-
-    validator () {}
-
-  private:
-    validator (validator const&);
-    validator& operator= (validator const&);
-  };
+  // The first pass is performed before processing. The second -- after.
+  // Throws operation_failed to signal a failure.
+  //
+  void
+  validate (options const&,
+            features&,
+            semantics::unit&,
+            semantics::path const&,
+            unsigned short pass);
 }
 
 #endif // ODB_RELATIONAL_VALIDATOR_HXX
diff --git a/odb/validator.cxx b/odb/validator.cxx
index e80f4d8..91d91e5 100644
--- a/odb/validator.cxx
+++ b/odb/validator.cxx
@@ -1457,7 +1457,7 @@ namespace
   };
 }
 
-void validator::
+void
 validate (options const& ops,
           features& f,
           semantics::unit& u,
@@ -1506,7 +1506,7 @@ validate (options const& ops,
   }
 
   if (!valid)
-    throw failed ();
+    throw validator_failed ();
 
   auto_ptr<context> ctx (create_context (cerr, u, ops, f, 0));
 
@@ -1559,7 +1559,7 @@ validate (options const& ops,
   }
 
   if (!valid)
-    throw failed ();
+    throw validator_failed ();
 
   switch (db)
   {
@@ -1575,12 +1575,11 @@ validate (options const& ops,
     {
       try
       {
-        relational::validator v;
-        v.validate (ops, f, u, p, pass);
+        relational::validate (ops, f, u, p, pass);
       }
-      catch (relational::validator::failed const&)
+      catch (operation_failed const&)
       {
-        throw failed ();
+        throw validator_failed ();
       }
 
       break;
diff --git a/odb/validator.hxx b/odb/validator.hxx
index f913049..3ffa470 100644
--- a/odb/validator.hxx
+++ b/odb/validator.hxx
@@ -9,25 +9,15 @@
 #include <odb/features.hxx>
 #include <odb/semantics/unit.hxx>
 
-class validator
-{
-public:
-  struct failed {};
+class validator_failed {};
 
-  // The first pass is performed before processing. The second -- after.
-  //
-  void
-  validate (options const&,
-            features&,
-            semantics::unit&,
-            semantics::path const&,
-            unsigned short pass);
-
-  validator () {}
-
-private:
-  validator (validator const&);
-  validator& operator= (validator const&);
-};
+// The first pass is performed before processing. The second -- after.
+//
+void
+validate (options const&,
+          features&,
+          semantics::unit&,
+          semantics::path const&,
+          unsigned short pass);
 
 #endif // ODB_VALIDATOR_HXX
-- 
2.25.0

