@brief Encoding - 1st element is size of the register name N, then next N represent register name, number of bitstrings M, then for each bit string {l, bs.length, count} @return
| 96 | // {l, bs.length, count} |
| 97 | /// @return |
| 98 | std::vector<std::size_t> ExecutionResult::serialize() const { |
| 99 | std::vector<std::size_t> retData; |
| 100 | |
| 101 | // Encode the classical register name |
| 102 | retData.push_back(registerName.length()); |
| 103 | for (std::size_t j = 0; j < registerName.length(); j++) { |
| 104 | retData.push_back((std::size_t)registerName[j]); |
| 105 | } |
| 106 | |
| 107 | // Encode the counts data |
| 108 | retData.push_back(counts.size()); |
| 109 | for (auto &kv : counts) { |
| 110 | auto bits = kv.first; |
| 111 | auto count = kv.second; |
| 112 | auto l = std::stol(bits, NULL, 2); |
| 113 | retData.push_back(l); |
| 114 | retData.push_back(bits.length()); |
| 115 | retData.push_back(count); |
| 116 | } |
| 117 | return retData; |
| 118 | } |
| 119 | |
| 120 | void ExecutionResult::deserialize(std::vector<std::size_t> &data) { |
| 121 | std::size_t stride = 0; |