/* | |
* 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 OUTPUTSTREAM_H_INCLUDED | |
#define OUTPUTSTREAM_H_INCLUDED | |
#include "InputStream.h" | |
namespace rocketmq { | |
//============================================================================== | |
/** | |
The base class for streams that write data to some kind of destination. | |
Input and output streams are used throughout the library - subclasses can | |
override | |
some or all of the virtual functions to implement their behaviour. | |
@see InputStream, MemoryOutputStream, FileOutputStream | |
*/ | |
class ROCKETMQCLIENT_API OutputStream { | |
protected: | |
//============================================================================== | |
OutputStream(); | |
public: | |
/** Destructor. | |
Some subclasses might want to do things like call flush() during their | |
destructors. | |
*/ | |
virtual ~OutputStream(); | |
//============================================================================== | |
/** If the stream is using a buffer, this will ensure it gets written | |
out to the destination. */ | |
virtual void flush() = 0; | |
/** Tries to move the stream's output position. | |
Not all streams will be able to seek to a new position - this will return | |
false if it fails to work. | |
@see getPosition | |
*/ | |
virtual bool setPosition(int64 newPosition) = 0; | |
/** Returns the stream's current position. | |
@see setPosition | |
*/ | |
virtual int64 getPosition() = 0; | |
//============================================================================== | |
/** Writes a block of data to the stream. | |
When creating a subclass of OutputStream, this is the only write method | |
that needs to be overloaded - the base class has methods for writing other | |
types of data which use this to do the work. | |
@param dataToWrite the target buffer to receive the data. This must | |
not be null. | |
@param numberOfBytes the number of bytes to write. | |
@returns false if the write operation fails for some reason | |
*/ | |
virtual bool write(const void* dataToWrite, size_t numberOfBytes) = 0; | |
//============================================================================== | |
/** Writes a single byte to the stream. | |
@returns false if the write operation fails for some reason | |
@see InputStream::readByte | |
*/ | |
virtual bool writeByte(char byte); | |
/** Writes a boolean to the stream as a single byte. | |
This is encoded as a binary byte (not as text) with a value of 1 or 0. | |
@returns false if the write operation fails for some reason | |
@see InputStream::readBool | |
*/ | |
virtual bool writeBool(bool boolValue); | |
/** Writes a 16-bit integer to the stream in a big-endian byte order. | |
This will write two bytes to the stream: (value >> 8), then (value & | |
0xff). | |
@returns false if the write operation fails for some reason | |
@see InputStream::readShortBigEndian | |
*/ | |
virtual bool writeShortBigEndian(short value); | |
/** Writes a 32-bit integer to the stream in a big-endian byte order. | |
@returns false if the write operation fails for some reason | |
@see InputStream::readIntBigEndian | |
*/ | |
virtual bool writeIntBigEndian(int value); | |
/** Writes a 64-bit integer to the stream in a big-endian byte order. | |
@returns false if the write operation fails for some reason | |
@see InputStream::readInt64BigEndian | |
*/ | |
virtual bool writeInt64BigEndian(int64 value); | |
/** Writes a 32-bit floating point value to the stream in a binary format. | |
The binary 32-bit encoding of the float is written as a big-endian int. | |
@returns false if the write operation fails for some reason | |
@see InputStream::readFloatBigEndian | |
*/ | |
virtual bool writeFloatBigEndian(float value); | |
/** Writes a 64-bit floating point value to the stream in a binary format. | |
The eight raw bytes of the double value are written out as a big-endian | |
64-bit int. | |
@see InputStream::readDoubleBigEndian | |
@returns false if the write operation fails for some reason | |
*/ | |
virtual bool writeDoubleBigEndian(double value); | |
/** Writes a byte to the output stream a given number of times. | |
@returns false if the write operation fails for some reason | |
*/ | |
virtual bool writeRepeatedByte(uint8 byte, size_t numTimesToRepeat); | |
/** Reads data from an input stream and writes it to this stream. | |
@param source the stream to read from | |
@param maxNumBytesToWrite the number of bytes to read from the stream | |
(if this is | |
less than zero, it will keep reading until the | |
input | |
is exhausted) | |
@returns the number of bytes written | |
*/ | |
virtual int64 writeFromInputStream(InputStream& source, int64 maxNumBytesToWrite); | |
}; | |
} // namespace rocketmq | |
#endif // OUTPUTSTREAM_H_INCLUDED |