blob: 4277dc2ea70c5954e8479176e54ebbd3afbcd98c [file] [log] [blame]
Elliott Hughes76160052012-12-12 16:31:20 -08001/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef BASE_UNIX_FILE_STRING_FILE_H_
18#define BASE_UNIX_FILE_STRING_FILE_H_
19
20#include <stdint.h>
21
22#include <string>
23
24#include "base/macros.h"
25#include "base/unix_file/random_access_file.h"
26#include "stringpiece.h"
27
28namespace unix_file {
29
30// A RandomAccessFile implementation backed by a std::string. (That is, all data is
31// kept in memory.)
32//
33// Not thread safe.
34class StringFile : public RandomAccessFile {
35 public:
36 StringFile();
37 virtual ~StringFile();
38
39 // RandomAccessFile API.
40 virtual int Close();
41 virtual int Flush();
42 virtual int64_t Read(char* buf, int64_t byte_count, int64_t offset) const;
43 virtual int SetLength(int64_t new_length);
44 virtual int64_t GetLength() const;
45 virtual int64_t Write(const char* buf, int64_t byte_count, int64_t offset);
46
47 // Bonus API.
48 void Assign(const art::StringPiece& new_data);
49 const art::StringPiece ToStringPiece() const;
50
51 private:
52 std::string data_;
53
54 DISALLOW_COPY_AND_ASSIGN(StringFile);
55};
56
57} // namespace unix_file
58
59#endif // BASE_UNIX_FILE_STRING_FILE_H_