| // Copyright 2015 Google Inc. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #ifndef COBALT_STORAGE_VIRTUAL_FILE_H_ |
| #define COBALT_STORAGE_VIRTUAL_FILE_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/basictypes.h" |
| #include "base/compiler_specific.h" |
| |
| namespace cobalt { |
| namespace storage { |
| class VirtualFileSystem; |
| |
| // VirtualFile implements an in-memory file system. These |
| // are managed by VirtualFileSystem for use by SQLite3. |
| // The format of a serialized VirtualFile is as follows: |
| // 8-byte name length |
| // <name length> File name string |
| // 8-byte file size |
| // <file size> raw bytes. |
| class VirtualFile { |
| public: |
| enum { kMaxVfsPathname = 512 }; |
| |
| int Read(void* dest, int bytes, int offset) const; |
| int Write(const void* source, int bytes, int offset); |
| int Truncate(int size); |
| int Size() const { return static_cast<int>(buffer_.size()); } |
| |
| private: |
| explicit VirtualFile(const std::string& name); |
| ~VirtualFile(); |
| |
| // Returns the number of bytes written |
| int Serialize(uint8* dest, const bool dry_run); |
| // Deserializes a file, returning the size of the file or |
| // < 0 on error. |
| // |buffer_remaining| is the maximum size of |source| |
| int Deserialize(const uint8* source, size_t buffer_remaining); |
| |
| std::vector<uint8> buffer_; |
| |
| std::string name_; |
| |
| friend class VirtualFileSystem; |
| DISALLOW_COPY_AND_ASSIGN(VirtualFile); |
| }; |
| |
| } // namespace storage |
| } // namespace cobalt |
| |
| #endif // COBALT_STORAGE_VIRTUAL_FILE_H_ |