-// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/constants.hpp>
#include <boost/algorithm/string/split.hpp>
+#include <algorithm>
#include <fstream>
#include <sstream>
void
CSVFile::addColumnInternal(const std::string& col_name) {
- if (getColumnIndex(col_name) >= 0) {
+ if (std::find(cols_.begin(), cols_.end(), col_name) != cols_.end()) {
isc_throw(CSVFileError, "attempt to add duplicate column '"
<< col_name << "'");
}
return (pos);
}
-int
+size_t
CSVFile::getColumnIndex(const std::string& col_name) const {
for (size_t i = 0; i < cols_.size(); ++i) {
if (cols_[i] == col_name) {
- return (static_cast<int>(i));
+ return (i);
}
}
- return (-1);
+ isc_throw(isc::OutOfRange, "column '" << col_name << "' doesn't exist");
}
std::string
-// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
/// This function is exception safe.
///
/// @param col_name Name of the column.
- /// @return Index of the column or negative value if the column doesn't
- /// exist.
- int getColumnIndex(const std::string& col_name) const;
+ /// @return Index of the column.
+ /// @throw OutOfRange if column with such name doesn't exist.
+ size_t getColumnIndex(const std::string& col_name) const;
/// @brief Returns the name of the column.
///
-// Copyright (C) 2015 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2015-2016 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
void
VersionedCSVFile::setMinimumValidColumns(const std::string& column_name) {
- int index = getColumnIndex(column_name);
- if (index < 0) {
+ try {
+ int index = getColumnIndex(column_name);
+ minimum_valid_columns_ = index + 1;
+
+ } catch (...) {
isc_throw(VersionedCSVFileError,
- "setMinimumValidColumns: " << column_name << " is defined");
+ "setMinimumValidColumns: " << column_name << " is not "
+ "defined");
}
-
- minimum_valid_columns_ = index + 1;
}
size_t