[glom] Dialog_ImportCsv: Replace get_parser() with parser_fetch_next_row().



commit 3a105426730b2f387e1914b140f5108ddac0609a
Author: Murray Cumming <murrayc murrayc com>
Date:   Tue Feb 9 15:22:25 2016 +0100

    Dialog_ImportCsv: Replace get_parser() with parser_fetch_next_row().
    
    So we can use std::unique_ptr<> instead of std::shared_ptr<> for the
    parser member variable, and generally make the APIs slightly less
    tightly bound.

 glom/import_csv/csv_parser.cc                 |   12 +++++-------
 glom/import_csv/csv_parser.h                  |    2 +-
 glom/import_csv/dialog_import_csv.cc          |    9 ++++++---
 glom/import_csv/dialog_import_csv.h           |    5 ++---
 glom/import_csv/dialog_import_csv_progress.cc |    2 +-
 5 files changed, 15 insertions(+), 15 deletions(-)
---
diff --git a/glom/import_csv/csv_parser.cc b/glom/import_csv/csv_parser.cc
index d121bfe..13613e2 100644
--- a/glom/import_csv/csv_parser.cc
+++ b/glom/import_csv/csv_parser.cc
@@ -125,12 +125,10 @@ const Glib::ustring& CsvParser::get_data(guint row, guint col) const
   return row_data[col];
 }
 
-const CsvParser::type_row_strings CsvParser::fetch_next_row()
+CsvParser::type_row_strings CsvParser::fetch_next_row()
 {
-  const type_row_strings empty;
-
-  g_return_val_if_fail(m_state == CsvParser::State::PARSING, empty);
-  g_return_val_if_fail(m_state == CsvParser::State::PARSED, empty);
+  g_return_val_if_fail(m_state == CsvParser::State::PARSING, fetch_next_row());
+  g_return_val_if_fail(m_state == CsvParser::State::PARSED, fetch_next_row());
 
   // We cannot fetch the next row, but since we are still parsing we might just have to parse a bit more!
   if(m_state == CsvParser::State::PARSING && m_row_index >= m_rows.size())
@@ -142,7 +140,7 @@ const CsvParser::type_row_strings CsvParser::fetch_next_row()
 
   if(m_state == CsvParser::State::PARSED && m_row_index >= m_rows.size())
   {
-    return empty;
+    return type_row_strings();
   }
 
   if(m_row_index < m_rows.size())
@@ -150,7 +148,7 @@ const CsvParser::type_row_strings CsvParser::fetch_next_row()
     return m_rows[m_row_index++];
   }
 
-  g_return_val_if_reached(empty);
+  return type_row_strings();
 }
 
 CsvParser::type_signal_file_read_error CsvParser::signal_file_read_error() const
diff --git a/glom/import_csv/csv_parser.h b/glom/import_csv/csv_parser.h
index 99e7881..116767f 100644
--- a/glom/import_csv/csv_parser.h
+++ b/glom/import_csv/csv_parser.h
@@ -84,7 +84,7 @@ public:
     */
   // TODO: Fix to cope with valid empty rows in between, without requiring the
   // client of this method to check for the parser's state/cache size.
-  const type_row_strings fetch_next_row();
+  type_row_strings fetch_next_row();
 
   // Signals:
   typedef sigc::signal<void, const Glib::ustring&> type_signal_file_read_error;
diff --git a/glom/import_csv/dialog_import_csv.cc b/glom/import_csv/dialog_import_csv.cc
index 2e4aab5..0f77788 100644
--- a/glom/import_csv/dialog_import_csv.cc
+++ b/glom/import_csv/dialog_import_csv.cc
@@ -124,7 +124,7 @@ Dialog_Import_CSV::Dialog_Import_CSV(BaseObjectType* cobject, const Glib::RefPtr
   m_encoding_combo->signal_changed().connect(sigc::mem_fun(*this, 
&Dialog_Import_CSV::on_combo_encoding_changed));
 
   // TODO: Reset parser encoding on selection changed.
-  m_parser = std::make_shared<CsvParser>(get_current_encoding());
+  m_parser = std::make_unique<CsvParser>(get_current_encoding());
   m_parser->signal_file_read_error().connect(sigc::mem_fun(*this, 
&Dialog_Import_CSV::on_parser_file_read_error));
   m_parser->signal_have_display_name().connect(sigc::mem_fun(*this, 
&Dialog_Import_CSV::on_parser_have_display_name));
   m_parser->signal_encoding_error().connect(sigc::mem_fun(*this, 
&Dialog_Import_CSV::on_parser_encoding_error));
@@ -241,9 +241,12 @@ const Glib::ustring& Dialog_Import_CSV::get_data(guint row, guint col)
   return m_parser->get_data(row, col);
 }
 
-std::shared_ptr<CsvParser> Dialog_Import_CSV::get_parser()
+CsvParser::type_row_strings Dialog_Import_CSV::parser_fetch_next_row()
 {
-  return m_parser;
+  if(!m_parser)
+    return CsvParser::type_row_strings();
+
+  return m_parser->fetch_next_row();
 }
 
 void Dialog_Import_CSV::clear()
diff --git a/glom/import_csv/dialog_import_csv.h b/glom/import_csv/dialog_import_csv.h
index e04111c..eb2a3d9 100644
--- a/glom/import_csv/dialog_import_csv.h
+++ b/glom/import_csv/dialog_import_csv.h
@@ -62,8 +62,7 @@ public:
   std::shared_ptr<const Field> get_field_for_column(unsigned int col) const;
   const Glib::ustring& get_data(unsigned int row, unsigned int col);
 
-  // TODO: perhaps it would be safer to just wrap the needed parser API here.
-  std::shared_ptr<CsvParser> get_parser();
+  CsvParser::type_row_strings parser_fetch_next_row();
 
   typedef sigc::signal<void> type_signal_state_changed;
 
@@ -129,7 +128,7 @@ private:
     Gtk::TreeModelColumn<int> m_col_row;
   };
 
-  std::shared_ptr<CsvParser> m_parser;
+  std::unique_ptr<CsvParser> m_parser;
 
   EncodingColumns m_encoding_columns;
   Glib::RefPtr<Gtk::ListStore> m_encoding_model;
diff --git a/glom/import_csv/dialog_import_csv_progress.cc b/glom/import_csv/dialog_import_csv_progress.cc
index c928eab..abc0cd5 100644
--- a/glom/import_csv/dialog_import_csv_progress.cc
+++ b/glom/import_csv/dialog_import_csv_progress.cc
@@ -163,7 +163,7 @@ bool Dialog_Import_CSV_Progress::on_idle_import()
   while(gtk_events_pending())
     gtk_main_iteration_do(true);
 
-  const auto row = m_data_source->get_parser()->fetch_next_row();
+  const auto row = m_data_source->parser_fetch_next_row();
 
   //If there are no more rows to import, then stop, by returning false:
   // TODO: Perhaps abort on 0 == row instead, so that we do not stop import on


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