| 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 | |