MCPcopy Create free account
hub / github.com/d99kris/rapidcsv / InsertColumn

Method InsertColumn

src/rapidcsv.h:843–902  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

841 */
842 template<typename T>
843 void InsertColumn(const size_t pColumnIdx, const std::vector<T>& pColumn = std::vector<T>(),
844 const std::string& pColumnName = std::string())
845 {
846 const size_t dataColumnIdx = GetDataColumnIndex(pColumnIdx);
847
848 std::vector<std::string> column;
849 if (pColumn.empty())
850 {
851 column.resize(GetDataRowCount());
852 }
853 else
854 {
855 column.resize(GetDataRowIndex(pColumn.size()));
856 Converter<T> converter(mConverterParams);
857 for (auto itRow = pColumn.begin(); itRow != pColumn.end(); ++itRow)
858 {
859 std::string str;
860 converter.ToStr(*itRow, str);
861 const size_t rowIdx =
862 static_cast<size_t>(std::distance(pColumn.begin(), itRow) + (mLabelParams.mColumnNameIdx + 1));
863 column.at(rowIdx) = str;
864 }
865 }
866
867 while (column.size() > GetDataRowCount())
868 {
869 std::vector<std::string> row;
870 const size_t columnCount = std::max<size_t>(static_cast<size_t>(mLabelParams.mColumnNameIdx + 1),
871 GetDataColumnCount());
872 row.resize(columnCount);
873 mData.push_back(row);
874 }
875
876 for (auto itRow = mData.begin(); itRow != mData.end(); ++itRow)
877 {
878 if (std::distance(mData.begin(), itRow) >= mLabelParams.mColumnNameIdx)
879 {
880 const size_t rowIdx = static_cast<size_t>(std::distance(mData.begin(), itRow));
881 if (dataColumnIdx <= itRow->size())
882 {
883 itRow->insert(itRow->begin() + static_cast<std::ptrdiff_t>(dataColumnIdx), column.at(rowIdx));
884 }
885 else
886 {
887 const std::string errStr = "column out of range: " +
888 std::to_string(pColumnIdx) + " (on row " +
889 std::to_string(std::distance(mData.begin(), itRow)) +
890 ")";
891 throw std::out_of_range(errStr);
892 }
893 }
894 }
895
896 if (!pColumnName.empty())
897 {
898 SetColumnName(pColumnIdx, pColumnName);
899 }
900

Callers 3

test081.cppFile · 0.80
test078.cppFile · 0.80
mainFunction · 0.80

Calls 1

ToStrMethod · 0.45

Tested by 1

mainFunction · 0.64