1// Licensed to the Apache Software Foundation (ASF) under one
2// or more contributor license agreements. See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership. The ASF licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License. You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied. See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18// Date: Wed Aug 8 05:51:33 PDT 2018
19
20#ifndef BUTIL_READER_WRITER_H
21#define BUTIL_READER_WRITER_H
22
23#include <sys/uio.h> // iovec
24
25namespace butil {
26
27// Abstraction for reading data.
28// The simplest implementation is to embed a file descriptor and read from it.
29class IReader {
30public:
31 virtual ~IReader() {}
32
33 // Semantics of parameters and return value are same as readv(2) except that
34 // there's no `fd'.
35 virtual ssize_t ReadV(const iovec* iov, int iovcnt) = 0;
36};
37
38// Abstraction for writing data.
39// The simplest implementation is to embed a file descriptor and writev into it.
40class IWriter {
41public:
42 virtual ~IWriter() {}
43
44 // Semantics of parameters and return value are same as writev(2) except that
45 // there's no `fd'.
46 // WriteV is required to submit data gathered by multiple appends in one
47 // run and enable the possibility of atomic writes.
48 virtual ssize_t WriteV(const iovec* iov, int iovcnt) = 0;
49};
50
51} // namespace butil
52
53#endif // BUTIL_READER_WRITER_H
54