[glom] Dialog_ImportCsv: Replace get_parser() with parser_fetch_next_row().
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glom] Dialog_ImportCsv: Replace get_parser() with parser_fetch_next_row().
- Date: Tue, 9 Feb 2016 15:07:57 +0000 (UTC)
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]