blob: d592a092ab4b38a957d76d440974cb8534419a0d [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you 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 IMPALA_EXEC_WRITE_STREAM_H
#define IMPALA_EXEC_WRITE_STREAM_H
#include <boost/cstdint.hpp>
#include "common/status.h"
namespace impala {
/// An append-only buffer to stage output from file writers. The buffer is backed
/// by a stringstream and uses the ReadWriteUtil to encode data. Append
/// operations will never fail, and will grow the backing buffer using
/// stringstream semantics. Each write function returns the number of bytes written
class WriteStream {
public:
WriteStream() : len_(0) { }
/// Writes bytes to the buffer, returns the number of bytes written
inline int WriteBytes(int length, const uint8_t* buf);
inline int WriteBytes(int length, const char* buf);
inline int WriteVInt(int32_t val);
inline int WriteInt(uint32_t val);
inline int WriteByte(uint8_t val);
inline int WriteByte(char val);
inline int WriteVLong(int64_t val);
inline int WriteBoolean(bool val);
/// Writes a zig-zag encoded integer
inline int WriteZInt(int32_t val);
inline int WriteZLong(int64_t val);
/// Writes the length as a VLong follows by the byte string
inline int WriteText(int32_t len, const uint8_t* buf);
/// Writes an empty string to the buffer (encoded as 1 byte)
inline int WriteEmptyText();
inline void Clear();
inline size_t Size();
/// returns the contents of this stream as a string
inline std::string String();
private:
/// TODO consider making this like the parquet writer to avoid extra copy
std::stringstream buffer_;
uint64_t len_;
};
} // namespace impala
#endif