blob: f5a9aec08e6e43ef06c5182e12c4ba6e87136aa5 [file] [log] [blame]
/*
* 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_