blob: 8bec8b3a1305150065642d129324f6de7dcd7a19 [file] [log] [blame]
// Copyright 2015 The Chromium OS 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 "settingsd/blob_ref.h"
#include <algorithm>
#include <cstring>
#include <base/logging.h>
namespace settingsd {
const uint8_t* BlobRef::kInvalidData = reinterpret_cast<uint8_t*>(1u);
BlobRef::BlobRef() : data_(kInvalidData), size_(0) {}
BlobRef::BlobRef(const uint8_t* data, size_t size) : data_(data), size_(size) {
CHECK(data_ || !size_);
}
BlobRef::BlobRef(const std::vector<uint8_t>* data)
: BlobRef(data->data(), data->size()) {}
BlobRef::BlobRef(const std::string* data)
: BlobRef(reinterpret_cast<const uint8_t*>(data->data()), data->size()) {}
BlobRef::BlobRef(const char* data)
: BlobRef(reinterpret_cast<const uint8_t*>(data), std::strlen(data)) {}
bool BlobRef::Equals(const BlobRef& that) const {
CHECK(valid());
CHECK(that.valid());
return size() == that.size() &&
std::equal(data(), data() + size(), that.data());
}
std::string BlobRef::ToString() const {
CHECK_NE(kInvalidData, data_);
if (!data_ || !size_)
return std::string();
return std::string(reinterpret_cast<const char*>(data_), size_);
}
std::vector<uint8_t> BlobRef::ToVector() const {
CHECK_NE(kInvalidData, data_);
if (!data_ || !size_)
return std::vector<uint8_t>();
return std::vector<uint8_t>(data_, data_ + size_);
}
} // namespace settingsd