1cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom/*
2cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom * Copyright (C) 2013 The Android Open Source Project
3cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom *
4cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom * Licensed under the Apache License, Version 2.0 (the "License");
5cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom * you may not use this file except in compliance with the License.
6cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom * You may obtain a copy of the License at
7cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom *
8cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom *      http://www.apache.org/licenses/LICENSE-2.0
9cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom *
10cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom * Unless required by applicable law or agreed to in writing, software
11cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom * distributed under the License is distributed on an "AS IS" BASIS,
12cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom * See the License for the specific language governing permissions and
14cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom * limitations under the License.
15cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom */
16cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
170e480cad5d2cf0904b98b7b56e90280e9b97ba30Ian Rogers#ifndef ART_COMPILER_OUTPUT_STREAM_H_
180e480cad5d2cf0904b98b7b56e90280e9b97ba30Ian Rogers#define ART_COMPILER_OUTPUT_STREAM_H_
19cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
20cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom#include <stdint.h>
21cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
22cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom#include <string>
23cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
24cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom#include "base/macros.h"
25cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
26cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstromnamespace art {
27cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
2849a0f158ed11974fa2cc12014c9f55a31dabd8dfBrian Carlstromenum Whence {
296f485c62b9cfce3ab71020c646ab9f48d9d29d6dBrian Carlstrom  kSeekSet = SEEK_SET,
306f485c62b9cfce3ab71020c646ab9f48d9d29d6dBrian Carlstrom  kSeekCurrent = SEEK_CUR,
316f485c62b9cfce3ab71020c646ab9f48d9d29d6dBrian Carlstrom  kSeekEnd = SEEK_END,
3249a0f158ed11974fa2cc12014c9f55a31dabd8dfBrian Carlstrom};
3349a0f158ed11974fa2cc12014c9f55a31dabd8dfBrian Carlstrom
34cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstromclass OutputStream {
35cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom public:
3693ba893c20532990a430741e0a97212900094e8cBrian Carlstrom  explicit OutputStream(const std::string& location) : location_(location) {}
37cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
3849a0f158ed11974fa2cc12014c9f55a31dabd8dfBrian Carlstrom  virtual ~OutputStream() {}
39cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
40cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom  const std::string& GetLocation() const {
41cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom    return location_;
42cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom  }
43cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
446f485c62b9cfce3ab71020c646ab9f48d9d29d6dBrian Carlstrom  virtual bool WriteFully(const void* buffer, int64_t byte_count) = 0;
45cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
466f485c62b9cfce3ab71020c646ab9f48d9d29d6dBrian Carlstrom  virtual off_t Seek(off_t offset, Whence whence) = 0;
47cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
48cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom private:
49cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom  const std::string location_;
50cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
51cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom  DISALLOW_COPY_AND_ASSIGN(OutputStream);
52cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom};
53cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
54cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom}  // namespace art
55cd60ac736bc7104785dc67671660d70fb434466fBrian Carlstrom
560e480cad5d2cf0904b98b7b56e90280e9b97ba30Ian Rogers#endif  // ART_COMPILER_OUTPUT_STREAM_H_
57