Chromium Code Reviews| Index: storage/common/data_element.h |
| diff --git a/storage/common/data_element.h b/storage/common/data_element.h |
| index 2eeca8e1d9513eb53e384bad97c2e2cea8d9cfc3..4ee5c6453071a03e92c85c2945b75fcc7c9a0d3d 100644 |
| --- a/storage/common/data_element.h |
| +++ b/storage/common/data_element.h |
| @@ -5,6 +5,7 @@ |
| #ifndef STORAGE_COMMON_DATA_ELEMENT_H_ |
| #define STORAGE_COMMON_DATA_ELEMENT_H_ |
| +#include <ostream> |
| #include <string> |
| #include <vector> |
| @@ -24,6 +25,8 @@ class STORAGE_COMMON_EXPORT DataElement { |
| enum Type { |
| TYPE_UNKNOWN = -1, |
| TYPE_BYTES, |
| + // Only used with BlobStorageMsg_StartBuildingBlob |
| + TYPE_BYTES_DESCRIPTION, |
| TYPE_FILE, |
| TYPE_BLOB, |
| TYPE_FILE_FILESYSTEM, |
| @@ -44,9 +47,14 @@ class STORAGE_COMMON_EXPORT DataElement { |
| return expected_modification_time_; |
| } |
| + // For use with SetToAllocatedBytes. Should only be used after calling |
| + // SetToAllocatedBytes. |
| + char* mutable_bytes() { return &buf_[0]; } |
| + |
| // Sets TYPE_BYTES data. This copies the given data into the element. |
| void SetToBytes(const char* bytes, int bytes_len) { |
| type_ = TYPE_BYTES; |
| + bytes_ = nullptr; |
| buf_.assign(bytes, bytes + bytes_len); |
| length_ = buf_.size(); |
| } |
| @@ -70,6 +78,12 @@ class STORAGE_COMMON_EXPORT DataElement { |
| length_ = buf_.size(); |
| } |
| + void SetToBytesDescription(size_t bytes_len) { |
| + type_ = TYPE_BYTES_DESCRIPTION; |
| + bytes_ = nullptr; |
| + length_ = bytes_len; |
| + } |
| + |
| // Sets TYPE_BYTES data. This does NOT copy the given data and the caller |
| // should make sure the data is alive when this element is accessed. |
| // You cannot use AppendBytes with this method. |
| @@ -79,6 +93,16 @@ class STORAGE_COMMON_EXPORT DataElement { |
| length_ = bytes_len; |
| } |
| + // Sets TYPE_BYTES data. This allocates the space for the bytes in the |
| + // internal vector but does not populate it with anything. The caller can |
| + // then use the bytes() method to access this buffer and populate it. |
| + void SetToAllocatedBytes(size_t bytes_len) { |
| + type_ = TYPE_BYTES; |
| + bytes_ = nullptr; |
| + buf_.resize(bytes_len); |
| + length_ = bytes_len; |
| + } |
| + |
| // Sets TYPE_FILE data. |
| void SetToFilePath(const base::FilePath& path) { |
| SetToFilePathRange(path, 0, kuint64max, base::Time()); |
| @@ -118,6 +142,9 @@ class STORAGE_COMMON_EXPORT DataElement { |
| base::Time expected_modification_time_; |
| }; |
| +STORAGE_COMMON_EXPORT std::ostream& operator<<(std::ostream& os, |
| + const DataElement& x); |
| + |
| #if defined(UNIT_TEST) |
| inline bool operator==(const DataElement& a, const DataElement& b) { |
| if (a.type() != b.type() || |
| @@ -138,6 +165,8 @@ inline bool operator==(const DataElement& a, const DataElement& b) { |
| // We compare only length and offset; we trust the entry itself was |
| // compared at some higher level such as in BlobDataItem. |
| return true; |
| + case DataElement::TYPE_BYTES_DESCRIPTION: |
| + return a.length() == b.length(); |
|
michaeln
2015/10/20 01:16:14
you can return true here since lengths are compare
dmurph
2015/10/20 18:28:27
Nice catch.
|
| case DataElement::TYPE_UNKNOWN: |
| NOTREACHED(); |
| return false; |
| @@ -148,6 +177,7 @@ inline bool operator==(const DataElement& a, const DataElement& b) { |
| inline bool operator!=(const DataElement& a, const DataElement& b) { |
| return !(a == b); |
| } |
| + |
| #endif // defined(UNIT_TEST) |
| } // namespace storage |