| 1862 | } // namespace |
| 1863 | |
| 1864 | Status LiteralBase::Piece::CopyFromProto(const LiteralProto& proto) { |
| 1865 | // These conditions should have been checked in |
| 1866 | // MutableLiteralBase::CreateFromProto. |
| 1867 | TF_RET_CHECK(proto.has_shape()); |
| 1868 | Shape shape(proto.shape()); |
| 1869 | TF_RET_CHECK(LayoutUtil::HasLayout(shape)); |
| 1870 | TF_RET_CHECK(ShapeUtil::Equal(shape, subshape())); |
| 1871 | |
| 1872 | switch (subshape().element_type()) { |
| 1873 | case PRED: |
| 1874 | TF_RETURN_IF_ERROR(CopyFromRepeatedField(data<bool>(), proto.preds())); |
| 1875 | break; |
| 1876 | case S8: { |
| 1877 | auto s8_data = data<int8>(); |
| 1878 | TF_RET_CHECK(proto.s8s().size() == s8_data.size()); |
| 1879 | std::copy(proto.s8s().begin(), proto.s8s().end(), s8_data.begin()); |
| 1880 | } break; |
| 1881 | case U8: { |
| 1882 | auto u8_data = data<uint8>(); |
| 1883 | TF_RET_CHECK(proto.u8s().size() == u8_data.size()); |
| 1884 | std::copy(proto.u8s().begin(), proto.u8s().end(), u8_data.begin()); |
| 1885 | } break; |
| 1886 | case S32: |
| 1887 | TF_RETURN_IF_ERROR(CopyFromRepeatedField(data<int32>(), proto.s32s())); |
| 1888 | break; |
| 1889 | case S64: |
| 1890 | TF_RETURN_IF_ERROR(CopyFromRepeatedField(data<int64>(), proto.s64s())); |
| 1891 | break; |
| 1892 | case U32: |
| 1893 | TF_RETURN_IF_ERROR(CopyFromRepeatedField(data<uint32>(), proto.u32s())); |
| 1894 | break; |
| 1895 | case U64: |
| 1896 | TF_RETURN_IF_ERROR(CopyFromRepeatedField(data<uint64>(), proto.u64s())); |
| 1897 | break; |
| 1898 | case S16: { |
| 1899 | const string& s(proto.s16s()); |
| 1900 | TF_RET_CHECK(data<int16_t>().size() * sizeof(int16_t) == s.size()); |
| 1901 | memcpy(untyped_data(), s.data(), s.size()); |
| 1902 | if (!kLittleEndian) { |
| 1903 | ConvertEndianShort(reinterpret_cast<char*>(untyped_data()), s.size()); |
| 1904 | } |
| 1905 | } break; |
| 1906 | case U16: { |
| 1907 | const string& s(proto.u16s()); |
| 1908 | TF_RET_CHECK(data<uint16_t>().size() * sizeof(uint16_t) == s.size()); |
| 1909 | memcpy(untyped_data(), s.data(), s.size()); |
| 1910 | if (!kLittleEndian) { |
| 1911 | ConvertEndianShort(reinterpret_cast<char*>(untyped_data()), s.size()); |
| 1912 | } |
| 1913 | } break; |
| 1914 | case F16: { |
| 1915 | const string& s(proto.f16s()); |
| 1916 | TF_RET_CHECK(data<half>().size() * sizeof(half) == s.size()); |
| 1917 | memcpy(untyped_data(), s.data(), s.size()); |
| 1918 | if (!kLittleEndian) { |
| 1919 | ConvertEndianShort(reinterpret_cast<char*>(untyped_data()), s.size()); |
| 1920 | } |
| 1921 | } break; |
no test coverage detected