blob: 57a83724aa154d490f6cc59d4d8dd85e986021c6 [file] [log] [blame]
// 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