[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master cde94ff9 10/13: Use an abstract-xor-final hie
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master cde94ff9 10/13: Use an abstract-xor-final hierarchy |
Date: |
Wed, 27 Jul 2022 15:16:34 -0400 (EDT) |
branch: master
commit cde94ff973687fefec022e1555b41436de9e2708
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>
Use an abstract-xor-final hierarchy
---
ce_product_name.hpp | 4 +++-
ce_skin_name.hpp | 4 +++-
datum_base.hpp | 11 ++---------
datum_boolean.hpp | 8 ++------
datum_sequence.cpp | 10 ----------
datum_sequence.hpp | 23 ++++++++++++++++-------
datum_string.hpp | 15 +++------------
mc_enum.hpp | 2 ++
tn_range.hpp | 8 ++------
9 files changed, 33 insertions(+), 52 deletions(-)
diff --git a/ce_product_name.hpp b/ce_product_name.hpp
index 003fbc53..3b4bef58 100644
--- a/ce_product_name.hpp
+++ b/ce_product_name.hpp
@@ -52,7 +52,7 @@
/// possible without adjusting the base class's 'allowed_' vector and
/// perhaps changing the way ordinal() works?
-class LMI_SO ce_product_name
+class LMI_SO ce_product_name final
:public mc_enum_base
{
public:
@@ -77,6 +77,8 @@ class LMI_SO ce_product_name
std::string value() const;
private:
+ void concrete_if_not_pure() override {}
+
// datum_base required implementation.
std::istream& read (std::istream&) override;
std::ostream& write(std::ostream&) const override;
diff --git a/ce_skin_name.hpp b/ce_skin_name.hpp
index 644248a0..94f38f39 100644
--- a/ce_skin_name.hpp
+++ b/ce_skin_name.hpp
@@ -42,7 +42,7 @@
/// to end users, but skin names are more esoteric and it is less
/// confusing to show them as file names rather than apparent phrases.
-class ce_skin_name
+class ce_skin_name final
:public mc_enum_base
{
public:
@@ -67,6 +67,8 @@ class ce_skin_name
std::string value() const;
private:
+ void concrete_if_not_pure() override {}
+
// datum_base required implementation.
std::istream& read (std::istream&) override;
std::ostream& write(std::ostream&) const override;
diff --git a/datum_base.hpp b/datum_base.hpp
index 53511fc2..d92afc9d 100644
--- a/datum_base.hpp
+++ b/datum_base.hpp
@@ -24,6 +24,7 @@
#include "config.hpp"
+#include "crtp_base.hpp" // abstract_base
#include "so_attributes.hpp"
#include <iosfwd>
@@ -33,7 +34,7 @@
/// Special member functions are protected simply because no need has
/// arisen for them to be public.
-class LMI_SO datum_base
+class LMI_SO datum_base : private lmi::abstract_base<datum_base>
{
public:
void enable(bool);
@@ -42,14 +43,6 @@ class LMI_SO datum_base
virtual std::istream& read (std::istream&) = 0;
virtual std::ostream& write(std::ostream&) const = 0;
- protected:
- datum_base() = default;
- datum_base(datum_base const&) = default;
- datum_base(datum_base&&) = default;
- datum_base& operator=(datum_base const&) = default;
- datum_base& operator=(datum_base&&) = default;
- virtual ~datum_base() = default;
-
private:
bool enabled_ {true};
};
diff --git a/datum_boolean.hpp b/datum_boolean.hpp
index accd1a92..1759f72e 100644
--- a/datum_boolean.hpp
+++ b/datum_boolean.hpp
@@ -32,12 +32,6 @@ class datum_boolean final
public:
explicit datum_boolean(bool = true);
- datum_boolean(datum_boolean const&) = default;
- datum_boolean(datum_boolean&&) = default;
- datum_boolean& operator=(datum_boolean const&) = default;
- datum_boolean& operator=(datum_boolean&&) = default;
- ~datum_boolean() override = default;
-
datum_boolean& operator=(bool);
bool value() const;
@@ -47,6 +41,8 @@ class datum_boolean final
std::ostream& write(std::ostream&) const override;
private:
+ void concrete_if_not_pure() override {}
+
bool value_;
};
diff --git a/datum_sequence.cpp b/datum_sequence.cpp
index 0a7ba75d..e5b4a131 100644
--- a/datum_sequence.cpp
+++ b/datum_sequence.cpp
@@ -25,17 +25,7 @@
#include "assert_lmi.hpp"
-/// Default constructor.
-///
-/// Throws if insane.
-
-sequence_base::sequence_base()
-{
-}
-
/// Construct from string.
-///
-/// Throws if insane.
sequence_base::sequence_base(std::string const& s)
:datum_string_base{s}
diff --git a/datum_sequence.hpp b/datum_sequence.hpp
index e122accd..e32bf26b 100644
--- a/datum_sequence.hpp
+++ b/datum_sequence.hpp
@@ -65,15 +65,9 @@ class sequence_base
virtual std::map<std::string,std::string> const allowed_keywords() const;
protected:
- sequence_base();
+ sequence_base() = default;
explicit sequence_base(std::string const&);
- sequence_base(sequence_base const&) = default;
- sequence_base(sequence_base&&) = default;
- sequence_base& operator=(sequence_base const&) = default;
- sequence_base& operator=(sequence_base&&) = default;
- ~sequence_base() override = default;
-
sequence_base& operator=(std::string const&);
void assert_sanity() const;
@@ -109,6 +103,9 @@ class numeric_sequence final
bool numeric_values_are_allowable() const override {return true;}
bool keyword_values_are_allowable() const override {return false;}
std::map<std::string,std::string> const allowed_keywords() const override;
+
+ private:
+ void concrete_if_not_pure() override {}
};
bool operator==(numeric_sequence const&, numeric_sequence const&);
@@ -139,6 +136,9 @@ class payment_sequence final
bool numeric_values_are_allowable() const override {return true;}
bool keyword_values_are_allowable() const override {return true;}
std::map<std::string,std::string> const allowed_keywords() const override;
+
+ private:
+ void concrete_if_not_pure() override {}
};
bool operator==(payment_sequence const&, payment_sequence const&);
@@ -170,6 +170,9 @@ class mode_sequence final
bool keyword_values_are_allowable() const override {return true;}
std::string const default_keyword() const override;
std::map<std::string,std::string> const allowed_keywords() const override;
+
+ private:
+ void concrete_if_not_pure() override {}
};
bool operator==(mode_sequence const&, mode_sequence const&);
@@ -200,6 +203,9 @@ class specamt_sequence final
bool numeric_values_are_allowable() const override {return true;}
bool keyword_values_are_allowable() const override {return true;}
std::map<std::string,std::string> const allowed_keywords() const override;
+
+ private:
+ void concrete_if_not_pure() override {}
};
bool operator==(specamt_sequence const&, specamt_sequence const&);
@@ -231,6 +237,9 @@ class dbo_sequence final
bool keyword_values_are_allowable() const override {return true;}
std::string const default_keyword() const override;
std::map<std::string,std::string> const allowed_keywords() const override;
+
+ private:
+ void concrete_if_not_pure() override {}
};
bool operator==(dbo_sequence const&, dbo_sequence const&);
diff --git a/datum_string.hpp b/datum_string.hpp
index 468ca4be..7985a580 100644
--- a/datum_string.hpp
+++ b/datum_string.hpp
@@ -37,12 +37,6 @@ class datum_string_base
datum_string_base() = default;
explicit datum_string_base(std::string const&);
- datum_string_base(datum_string_base const&) = default;
- datum_string_base(datum_string_base&&) = default;
- datum_string_base& operator=(datum_string_base const&) = default;
- datum_string_base& operator=(datum_string_base&&) = default;
- ~datum_string_base() override = default;
-
datum_string_base& operator=(std::string const&);
std::string const& value() const;
@@ -64,13 +58,10 @@ class datum_string final
datum_string() = default;
explicit datum_string(std::string const& s) : datum_string_base{s} {}
- datum_string(datum_string const&) = default;
- datum_string(datum_string&&) = default;
- datum_string& operator=(datum_string const&) = default;
- datum_string& operator=(datum_string&&) = default;
- ~datum_string() override = default;
-
datum_string& operator=(std::string const&);
+
+ private:
+ void concrete_if_not_pure() override {}
};
bool operator==(datum_string const&, datum_string const&);
diff --git a/mc_enum.hpp b/mc_enum.hpp
index e01434d7..acd3c533 100644
--- a/mc_enum.hpp
+++ b/mc_enum.hpp
@@ -132,6 +132,8 @@ class mc_enum final
static char const* const* c();
static std::vector<std::string> const& s();
+ void concrete_if_not_pure() override {}
+
// datum_base required implementation.
std::istream& read (std::istream&) override;
std::ostream& write(std::ostream&) const override;
diff --git a/tn_range.hpp b/tn_range.hpp
index fe6de2ba..0605f887 100644
--- a/tn_range.hpp
+++ b/tn_range.hpp
@@ -241,12 +241,6 @@ class tn_range final
explicit tn_range(Number);
explicit tn_range(std::string const&);
- tn_range(tn_range const&) = default;
- tn_range(tn_range&&) = default;
- tn_range& operator=(tn_range const&) = default;
- tn_range& operator=(tn_range&&) = default;
- ~tn_range() override = default;
-
tn_range& operator=(Number);
tn_range& operator=(std::string const&);
@@ -273,6 +267,8 @@ class tn_range final
std::string format_limits_for_error_message() const;
bool is_valid(Number) const;
+ void concrete_if_not_pure() override {}
+
// datum_base required implementation.
std::istream& read (std::istream&) override;
std::ostream& write(std::ostream&) const override;
- [lmi-commits] [lmi] master updated (6126d1e0 -> a07a61b8), Greg Chicares, 2022/07/27
- [lmi-commits] [lmi] master 7649cf4d 05/13: Modernize class uncopyable and its documentation, Greg Chicares, 2022/07/27
- [lmi-commits] [lmi] master 41339667 06/13: Rename uncopyable_lmi.hpp -> crtp_base.hpp, Greg Chicares, 2022/07/27
- [lmi-commits] [lmi] master 48007e3c 09/13: Support an abstract-xor-final hierarchy, Greg Chicares, 2022/07/27
- [lmi-commits] [lmi] master a07a61b8 13/13: Declutter, Greg Chicares, 2022/07/27
- [lmi-commits] [lmi] master 22a759fa 12/13: Devirtualize, Greg Chicares, 2022/07/27
- [lmi-commits] [lmi] master f12819ba 02/13: Make md5sum_for_file ctor noexcept, Greg Chicares, 2022/07/27
- [lmi-commits] [lmi] master 6e590f5c 01/13: Work around a spurious gcc 12 -Wnull-dereference, Greg Chicares, 2022/07/27
- [lmi-commits] [lmi] master 0c2fceb0 04/13: Resurrect 'uncopyable_lmi.hpp', Greg Chicares, 2022/07/27
- [lmi-commits] [lmi] master cde94ff9 10/13: Use an abstract-xor-final hierarchy,
Greg Chicares <=
- [lmi-commits] [lmi] master efa79f5c 07/13: Establish unit tests for CRTP convenience classes, Greg Chicares, 2022/07/27
- [lmi-commits] [lmi] master 4ebf92ed 03/13: Suppress warnings for deprecated unary_function in cgicc, Greg Chicares, 2022/07/27
- [lmi-commits] [lmi] master 21685250 11/13: Use another abstract-xor-final hierarchy, Greg Chicares, 2022/07/27
- [lmi-commits] [lmi] master 2143f359 08/13: Add unit tests for CRTP convenience classes, Greg Chicares, 2022/07/27