lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [lmi] master 0311539 3/5: Make it easier to make input seq


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 0311539 3/5: Make it easier to make input sequences Copyable
Date: Tue, 7 Mar 2017 18:04:20 -0500 (EST)

branch: master
commit 0311539d36c7b67a57bba14c6add5bd012e59952
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>

    Make it easier to make input sequences Copyable
    
    Stored diagnostics in a std::string member, which is copyable (the
    std::ostream where they are conveniently accumulated is not). Renamed
    the accessor for diagnostics accordingly. Added a comment suggesting
    how copy operations might be implemented.
    
    Incidentally, made explicitly-deleted special member functions public:
    that's clearer, equivalent, and gives simpler compiler diagnostics.
    
    Also incidentally, made the 'parser' local variable in InputSequence's
    public ctor const: there's no reason not to, and that's reason enough.
---
 input_sequence.cpp        |  4 ++--
 input_sequence_parser.cpp |  9 +++++----
 input_sequence_parser.hpp | 11 +++++++----
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/input_sequence.cpp b/input_sequence.cpp
index 23f035b..c5d3efc 100644
--- a/input_sequence.cpp
+++ b/input_sequence.cpp
@@ -94,7 +94,7 @@ InputSequence::InputSequence
         || a_keywords_only && contains(a_allowed_keywords, a_default_keyword)
         );
 
-    SequenceParser parser
+    SequenceParser const parser
         (input_expression
         ,a_years_to_maturity
         ,a_issue_age
@@ -105,7 +105,7 @@ InputSequence::InputSequence
         ,a_keywords_only
         );
 
-    std::string const parser_diagnostics = parser.diagnostics();
+    std::string const parser_diagnostics = parser.diagnostic_messages();
     if(!parser_diagnostics.empty())
         {
         throw std::runtime_error(parser_diagnostics);
diff --git a/input_sequence_parser.cpp b/input_sequence_parser.cpp
index d000d76..a66c1a5 100644
--- a/input_sequence_parser.cpp
+++ b/input_sequence_parser.cpp
@@ -51,11 +51,12 @@ SequenceParser::SequenceParser
     ,keywords_only_                 (a_keywords_only)
 {
     sequence();
+    diagnostic_messages_ = diagnostics_.str();
 }
 
-std::string SequenceParser::diagnostics() const
+std::string SequenceParser::diagnostic_messages() const
 {
-    return diagnostics_.str();
+    return diagnostic_messages_;
 }
 
 std::vector<ValueInterval> const& SequenceParser::intervals() const
@@ -655,8 +656,8 @@ void SequenceParser::mark_diagnostic_context()
 
 /// Extract first substring from a '\n'-delimited exception::what().
 ///
-/// SequenceParser::diagnostics() returns a '\n'-delimited string
-/// describing all the anomalies diagnosed while parsing an input
+/// SequenceParser::diagnostic_messages() returns a '\n'-delimited
+/// string describing all anomalies diagnosed while parsing an input
 /// sequence. When that string is not empty, it is reasonable to throw
 /// an exception constructed from it--most generally, in its entirety.
 ///
diff --git a/input_sequence_parser.hpp b/input_sequence_parser.hpp
index 2e972d6..51c7935 100644
--- a/input_sequence_parser.hpp
+++ b/input_sequence_parser.hpp
@@ -46,15 +46,17 @@ class SequenceParser final
         ,bool                            a_keywords_only
         );
 
+    // In case it is ever desired to implement these: they might
+    // simply copy the "parser products" data members that have
+    // public accessors.
+    SequenceParser(SequenceParser const&) = delete;
+    SequenceParser& operator=(SequenceParser const&) = delete;
     ~SequenceParser() = default;
 
-    std::string diagnostics() const;
+    std::string diagnostic_messages() const;
     std::vector<ValueInterval> const& intervals() const;
 
   private:
-    SequenceParser(SequenceParser const&) = delete;
-    SequenceParser& operator=(SequenceParser const&) = delete;
-
     enum token_type
         {e_eof             = 0
         ,e_major_separator = ';'
@@ -91,6 +93,7 @@ class SequenceParser final
     void mark_diagnostic_context();
 
     // Parser products.
+    std::string diagnostic_messages_;
     std::vector<ValueInterval> intervals_;
 
     // Streams for parser input and diagnostic messages.



reply via email to

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