Showing the changes to Source/Libraries/TimeSeriesPlatformLibrary/Data/DataTable.cpp (1 of 3 files). Show all
Unified · Split
| @@ -87,7 +87,12 @@ const DataColumnPtr& DataTable::operator[](int32_t index) const · 86 unmodified lines | ||
| 87 | 87 | |
| 88 | 88 | DataColumnPtr DataTable::CreateColumn(const string& name, DataType type, string expression) |
| 89 | 89 | { |
| 90 | − return NewSharedPtr<DataColumn, DataTablePtr, string, DataType>(shared_from_this(), name, type, expression); | |
| 90 | + return NewSharedPtr<DataColumn, DataTablePtr, string, DataType>(shared_from_this(), name, type, std::move(expression)); | |
| 91 | +} | |
| 92 | + | |
| 93 | +DataColumnPtr DataTable::CloneColumn(const DataColumnPtr& source) | |
| 94 | +{ | |
| 95 | + return CreateColumn(source->Name(), source->Type(), source->Expression()); | |
| 91 | 96 | } |
| 92 | 97 | |
| 93 | 98 | int32_t DataTable::ColumnCount() const |
| @@ -113,6 +118,67 @@ DataRowPtr DataTable::CreateRow() · 19 unmodified lines | ||
| 113 | 118 | return NewSharedPtr<DataRow, DataTablePtr>(shared_from_this()); |
| 114 | 119 | } |
| 115 | 120 | |
| 121 | +DataRowPtr DataTable::CloneRow(const DataRowPtr& source) | |
| 122 | +{ | |
| 123 | + DataRowPtr row = CreateRow(); | |
| 124 | + | |
| 125 | + for (size_t i = 0; i < m_columns.size(); i++) | |
| 126 | + { | |
| 127 | + switch (m_columns[i]->m_type) | |
| 128 | + { | |
| 129 | + case DataType::String: | |
| 130 | + row->SetStringValue(i, source->ValueAsString(i)); | |
| 131 | + break; | |
| 132 | + case DataType::Boolean: | |
| 133 | + row->SetBooleanValue(i, source->ValueAsBoolean(i)); | |
| 134 | + break; | |
| 135 | + case DataType::DateTime: | |
| 136 | + row->SetDateTimeValue(i, source->ValueAsDateTime(i)); | |
| 137 | + break; | |
| 138 | + case DataType::Single: | |
| 139 | + row->SetSingleValue(i, source->ValueAsSingle(i)); | |
| 140 | + break; | |
| 141 | + case DataType::Double: | |
| 142 | + row->SetDoubleValue(i, source->ValueAsDouble(i)); | |
| 143 | + break; | |
| 144 | + case DataType::Decimal: | |
| 145 | + row->SetDecimalValue(i, source->ValueAsDecimal(i)); | |
| 146 | + break; | |
| 147 | + case DataType::Guid: | |
| 148 | + row->SetGuidValue(i, source->ValueAsGuid(i)); | |
| 149 | + break; | |
| 150 | + case DataType::Int8: | |
| 151 | + row->SetInt8Value(i, source->ValueAsInt8(i)); | |
| 152 | + break; | |
| 153 | + case DataType::Int16: | |
| 154 | + row->SetInt16Value(i, source->ValueAsInt16(i)); | |
| 155 | + break; | |
| 156 | + case DataType::Int32: | |
| 157 | + row->SetInt32Value(i, source->ValueAsInt32(i)); | |
| 158 | + break; | |
| 159 | + case DataType::Int64: | |
| 160 | + row->SetInt64Value(i, source->ValueAsInt64(i)); | |
| 161 | + break; | |
| 162 | + case DataType::UInt8: | |
| 163 | + row->SetUInt8Value(i, source->ValueAsUInt8(i)); | |
| 164 | + break; | |
| 165 | + case DataType::UInt16: | |
| 166 | + row->SetUInt16Value(i, source->ValueAsUInt16(i)); | |
| 167 | + break; | |
| 168 | + case DataType::UInt32: | |
| 169 | + row->SetUInt32Value(i, source->ValueAsUInt32(i)); | |
| 170 | + break; | |
| 171 | + case DataType::UInt64: | |
| 172 | + row->SetUInt64Value(i, source->ValueAsUInt64(i)); | |
| 173 | + break; | |
| 174 | + default: | |
| 175 | + throw DataSetException("Unexpected column data type encountered"); | |
| 176 | + } | |
| 177 | + } | |
| 178 | + | |
| 179 | + return row; | |
| 180 | +} | |
| 181 | + | |
| 116 | 182 | int32_t DataTable::RowCount() const |
| 117 | 183 | { |
| 118 | 184 | return m_rows.size(); |