| 1401 | } |
| 1402 | |
| 1403 | void CloneArray(Model* model, const string& source_array_name, |
| 1404 | const string& target_array_name) { |
| 1405 | CHECK(!model->HasArray(target_array_name)); |
| 1406 | const Array& source_array = model->GetArray(source_array_name); |
| 1407 | Array& target_array = model->GetOrCreateArray(target_array_name); |
| 1408 | CopyArrayAttribs(source_array, &target_array); |
| 1409 | |
| 1410 | if (!source_array.buffer) { |
| 1411 | return; |
| 1412 | } |
| 1413 | |
| 1414 | switch (source_array.data_type) { |
| 1415 | case ArrayDataType::kBool: |
| 1416 | CopyArrayBuffer<ArrayDataType::kBool>(source_array, &target_array); |
| 1417 | break; |
| 1418 | case ArrayDataType::kFloat: |
| 1419 | CopyArrayBuffer<ArrayDataType::kFloat>(source_array, &target_array); |
| 1420 | break; |
| 1421 | case ArrayDataType::kInt8: |
| 1422 | CopyArrayBuffer<ArrayDataType::kInt8>(source_array, &target_array); |
| 1423 | break; |
| 1424 | case ArrayDataType::kUint8: |
| 1425 | CopyArrayBuffer<ArrayDataType::kUint8>(source_array, &target_array); |
| 1426 | break; |
| 1427 | case ArrayDataType::kInt16: |
| 1428 | CopyArrayBuffer<ArrayDataType::kInt16>(source_array, &target_array); |
| 1429 | break; |
| 1430 | case ArrayDataType::kUint16: |
| 1431 | CopyArrayBuffer<ArrayDataType::kUint16>(source_array, &target_array); |
| 1432 | break; |
| 1433 | case ArrayDataType::kInt32: |
| 1434 | CopyArrayBuffer<ArrayDataType::kInt32>(source_array, &target_array); |
| 1435 | break; |
| 1436 | case ArrayDataType::kUint32: |
| 1437 | CopyArrayBuffer<ArrayDataType::kUint32>(source_array, &target_array); |
| 1438 | break; |
| 1439 | case ArrayDataType::kInt64: |
| 1440 | CopyArrayBuffer<ArrayDataType::kInt64>(source_array, &target_array); |
| 1441 | break; |
| 1442 | case ArrayDataType::kUint64: |
| 1443 | CopyArrayBuffer<ArrayDataType::kUint64>(source_array, &target_array); |
| 1444 | break; |
| 1445 | case ArrayDataType::kString: |
| 1446 | CopyArrayBuffer<ArrayDataType::kString>(source_array, &target_array); |
| 1447 | break; |
| 1448 | case ArrayDataType::kComplex64: |
| 1449 | CopyArrayBuffer<ArrayDataType::kComplex64>(source_array, &target_array); |
| 1450 | break; |
| 1451 | default: |
| 1452 | LOG(FATAL) << "Unsupported data type: " |
| 1453 | << ArrayDataTypeName(source_array.data_type); |
| 1454 | return; |
| 1455 | } |
| 1456 | } |
| 1457 | |
| 1458 | void MakeArrayDims(int num_dims, int batch, int height, int width, int depth, |
| 1459 | std::vector<int>* out_dims) { |
no test coverage detected