lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] odd/abstract_base a171b7f4 3/3: Split datum_string i


From: Greg Chicares
Subject: [lmi-commits] [lmi] odd/abstract_base a171b7f4 3/3: Split datum_string into abstract base and concrete leaf
Date: Thu, 14 Jul 2022 19:54:33 -0400 (EDT)

branch: odd/abstract_base
commit a171b7f4f860b59cf156c6a083b9b7accb1002c1
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>

    Split datum_string into abstract base and concrete leaf
    
    This is a "spike" solution that has the virtue of passing every
    nychthemeral test.
---
 datum_string.cpp | 28 ++++++++++++++++++++++------
 datum_string.hpp | 41 +++++++++++++++++++++++++++++++++++------
 2 files changed, 57 insertions(+), 12 deletions(-)

diff --git a/datum_string.cpp b/datum_string.cpp
index 22951087..505f3b9a 100644
--- a/datum_string.cpp
+++ b/datum_string.cpp
@@ -28,23 +28,23 @@
 #include <istream>
 #include <ostream>
 
-datum_string::datum_string(std::string const& value)
-    :value_ {value}
+datum_string_base::datum_string_base(std::string const& s)
+    :value_ {s}
 {
 }
 
-datum_string& datum_string::operator=(std::string const& s)
+datum_string_base& datum_string_base::operator=(std::string const& s)
 {
     value_ = s;
     return *this;
 }
 
-std::string const& datum_string::value() const
+std::string const& datum_string_base::value() const
 {
     return value_;
 }
 
-std::istream& datum_string::read(std::istream& is)
+std::istream& datum_string_base::read(std::istream& is)
 {
     std::locale old_locale = is.imbue(blank_is_not_whitespace_locale());
     is >> value_;
@@ -52,11 +52,27 @@ std::istream& datum_string::read(std::istream& is)
     return is;
 }
 
-std::ostream& datum_string::write(std::ostream& os) const
+std::ostream& datum_string_base::write(std::ostream& os) const
 {
     return os << value();
 }
 
+bool operator==(datum_string_base const& lhs, datum_string_base const& rhs)
+{
+    return lhs.value() == rhs.value();
+}
+
+datum_string::datum_string(std::string const& s)
+    :datum_string_base {s}
+{
+}
+
+datum_string& datum_string::operator=(std::string const& s)
+{
+    datum_string_base::operator=(s);
+    return *this;
+}
+
 bool operator==(datum_string const& lhs, datum_string const& rhs)
 {
     return lhs.value() == rhs.value();
diff --git a/datum_string.hpp b/datum_string.hpp
index 68fc7188..ee69bb6a 100644
--- a/datum_string.hpp
+++ b/datum_string.hpp
@@ -30,8 +30,37 @@
 
 #include <string>
 
-class datum_string
+class datum_string_base
     :public datum_base
+{
+  public:
+    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 = 0;
+
+    datum_string_base& operator=(std::string const&);
+
+    std::string const& value() const;
+
+    // datum_base required implementation.
+    std::istream& read (std::istream&) override;
+    std::ostream& write(std::ostream&) const override;
+
+  private:
+    std::string value_;
+};
+
+inline datum_string_base::~datum_string_base() = default;
+
+bool operator==(datum_string_base const&, datum_string_base const&);
+
+class datum_string
+    :public datum_string_base
 {
   public:
     datum_string() = default;
@@ -45,14 +74,14 @@ class datum_string
 
     datum_string& operator=(std::string const&);
 
-    std::string const& value() const;
+//  std::string const& value() const;
 
     // datum_base required implementation.
-    std::istream& read (std::istream&) override;
-    std::ostream& write(std::ostream&) const override;
+//  std::istream& read (std::istream&) override;
+//  std::ostream& write(std::ostream&) const override;
 
-  private:
-    std::string value_;
+//private:
+//  std::string value_;
 };
 
 bool operator==(datum_string const&, datum_string const&);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]