@@ -28,6 +28,7 @@ iree::runtime::Device::~Device() {
2828
2929iree::runtime::IREETensor::IREETensor (iree_hal_buffer_view_t *buffer_view, iree_hal_element_type_t type) : buffer_view(buffer_view), type(type) {
3030 size = iree_hal_buffer_view_byte_length (buffer_view);
31+ // TODO: fill in dim metadata
3132}
3233
3334iree::runtime::IREETensor::IREETensor (void *data, size_t size, std::vector<int64_t > in_dims, iree_hal_element_type_t type) : size(size), type(type) {
@@ -43,6 +44,55 @@ iree::runtime::IREETensor::IREETensor(void *data, size_t size, std::vector<int64
4344 this ->buffer_view = nullptr ;
4445}
4546
47+ iree::runtime::IREETensor::IREETensor (char *buffer) {
48+ size_t offset = 0 ;
49+
50+ // Deserialize 'type'
51+ std::memcpy (&type, buffer + offset, sizeof (type));
52+ offset += sizeof (type);
53+
54+ // Deserialize 'size'
55+ std::memcpy (&size, buffer + offset, sizeof (size));
56+ offset += sizeof (size);
57+
58+ // Allocate memory and deserialize 'data'
59+ data = operator new (size); // Allocate raw memory
60+ std::memcpy (data, buffer + offset, size);
61+ offset += size;
62+
63+ // Deserialize 'dims'
64+ size_t num_dims;
65+ std::memcpy (&num_dims, buffer + offset, sizeof (num_dims));
66+ offset += sizeof (num_dims);
67+ dims.resize (num_dims);
68+ std::memcpy (dims.data (), buffer + offset, num_dims * sizeof (iree_hal_dim_t ));
69+
70+ this ->buffer_view = nullptr ;
71+ }
72+
73+ std::vector<char > *iree::runtime::IREETensor::serialize () {
74+ auto buffer = new std::vector<char >();
75+
76+ // Serialize 'type'
77+ size_t type_size = sizeof (type);
78+ buffer->insert (buffer->end (), reinterpret_cast <const char *>(&type), reinterpret_cast <const char *>(&type) + type_size);
79+
80+ // Serialize 'size'
81+ size_t size_size = sizeof (size);
82+ buffer->insert (buffer->end (), reinterpret_cast <const char *>(&size), reinterpret_cast <const char *>(&size) + size_size);
83+
84+ // Serialize 'data'
85+ buffer->insert (buffer->end (), reinterpret_cast <const char *>(data), reinterpret_cast <const char *>(data) + size);
86+
87+ // Serialize 'dims'
88+ size_t dims_size = sizeof (iree_hal_dim_t ) * dims.size ();
89+ size_t num_dims = dims.size ();
90+ buffer->insert (buffer->end (), reinterpret_cast <const char *>(&num_dims), reinterpret_cast <const char *>(&num_dims) + sizeof (num_dims));
91+ buffer->insert (buffer->end (), reinterpret_cast <const char *>(dims.data ()), reinterpret_cast <const char *>(dims.data ()) + dims_size);
92+
93+ return buffer;
94+ }
95+
4696iree_vm_instance_t *create_instance () {
4797 iree_vm_instance_t *instance = nullptr ;
4898 iree_status_t status = iree_vm_instance_create (IREE_VM_TYPE_CAPACITY_DEFAULT, iree_allocator_system (), &instance);
0 commit comments