| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "impeller/archivist/archive_vector.h" |
| |
| #include <sstream> |
| |
| #include "impeller/archivist/archive_location.h" |
| |
| namespace impeller { |
| |
| ArchiveVector::ArchiveVector(std::vector<int64_t> keys) |
| : keys_(std::move(keys)) {} |
| |
| ArchiveVector::ArchiveVector() {} |
| |
| static constexpr const char* kVectorKeys = "keys"; |
| |
| ArchiveDef ArchiveVector::kArchiveDefinition = { |
| .table_name = "IPLR_vectors", |
| .members = {kVectorKeys}, |
| }; |
| |
| PrimaryKey ArchiveVector::GetPrimaryKey() const { |
| // Archive definition says the keys will be auto assigned. |
| return std::nullopt; |
| } |
| |
| const std::vector<int64_t> ArchiveVector::GetKeys() const { |
| return keys_; |
| } |
| |
| bool ArchiveVector::Write(ArchiveLocation& item) const { |
| std::stringstream stream; |
| for (size_t i = 0, count = keys_.size(); i < count; i++) { |
| stream << keys_[i]; |
| if (i != count - 1) { |
| stream << ","; |
| } |
| } |
| return item.Write(kVectorKeys, stream.str()); |
| } |
| |
| bool ArchiveVector::Read(ArchiveLocation& item) { |
| std::string flattened; |
| if (!item.Read(kVectorKeys, flattened)) { |
| return false; |
| } |
| |
| std::stringstream stream(flattened); |
| int64_t single = 0; |
| while (stream >> single) { |
| keys_.emplace_back(single); |
| stream.ignore(); |
| } |
| |
| return true; |
| } |
| |
| } // namespace impeller |