blob: 740addfdd817cc96026fa40ef20b191a1e1a5a47 [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.
#ifndef SETTINGSD_BLOB_REF_H_
#define SETTINGSD_BLOB_REF_H_
#include <stddef.h>
#include <stdint.h>
#include <string>
#include <vector>
namespace settingsd {
// A simple wrapper to refer to a blob of binary data. Note that BlobRef doesn't
// grab ownership of the memory that backs the BlobRef, so the memory a BlobRef
// refers to must remain valid for the lifetime of the BlobRef. In particular,
// BlobRefs constructed from std::string and std::vector<uint8_t> require that
// the underlying container not be mutated during the lifetime of the BlobRef,
// as that may cause re-allocation of the memory buffer and thus break the
// BlobRef.
class BlobRef {
public:
BlobRef();
BlobRef(const uint8_t* data, size_t size);
explicit BlobRef(const std::vector<uint8_t>* data);
explicit BlobRef(const std::string* data);
explicit BlobRef(const char* data);
const uint8_t* data() const { return data_; }
size_t size() const { return size_; }
// Returns true if the BlobRef has been initialized with a value at
// construction rather than having been created by the default constructor.
// Otherwise returns false.
bool valid() const { return data_ != kInvalidData; }
// Returns true if the contents of the |that| BlobRef is byte-wise equal to
// the contents of this BlobRef. Note: this may only be called on a valid
// BlobRef.
bool Equals(const BlobRef& that) const;
// Returns a string containing a copy of the data. Note: this may only be
// called on a valid BlobRef.
std::string ToString() const;
// Returns a vector containing a copy of the data. Note: this may only be
// called on a valid BlobRef.
std::vector<uint8_t> ToVector() const;
private:
static const uint8_t* kInvalidData;
const uint8_t* const data_;
const size_t size_;
};
} // namespace settingsd
#endif // SETTINGSD_BLOB_REF_H_