/* * 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 _DECAF_IO_DATAOUTPUT_H_ #define _DECAF_IO_DATAOUTPUT_H_ #include #include #include #include #include #include #include namespace decaf { namespace io { /** * The DataOutput interface provides for converting data from any of the C++ primitive types * to a series of bytes and writing these bytes to a binary stream. There is also a facility * for converting Strings into the Java standard modified UTF-8 format and writing the * resulting series of bytes. * * If a method in this interface encounters an error while writing it will throw an IOException. * * @see DataInput * @see DataOutputStream * * @since 1.0 */ class DECAF_API DataOutput { public: virtual ~DataOutput(); /** * Writes a boolean to the underlying output stream as a 1-byte value. The * value true is written out as the value (byte)1; the value false * is written out as the value (byte)0. If no exception is thrown, * the counter written is incremented by 1. * * @param value * The boolean to write as a byte (1=true, 0=false). * * @throws IOException if an I/O error is encountered. */ virtual void writeBoolean(bool value) = 0; /** * Writes out a byte to the underlying output stream as a 1-byte * value. If no exception is thrown, the counter written is * incremented by 1. * * @param value * The unsigned char value to write. * * @throws IOException if an I/O error is encountered. */ virtual void writeByte(unsigned char value) = 0; /** * Writes a short to the underlying output stream as two bytes, high * byte first. If no exception is thrown, the counter written is * incremented by 2. * * @param value * The signed short value to write. * * @throws IOException if an I/O error is encountered. */ virtual void writeShort(short value) = 0; /** * Writes a unsigned short to the bytes message stream as a 2 byte value * * @param value * The unsigned short to write to the stream. * * @throws IOException if an I/O error is encountered. */ virtual void writeUnsignedShort(unsigned short value) = 0; /** * Writes out a char to the underlying output stream as a one byte * value If no exception is thrown, the counter written is * incremented by 1. * * @param value * The signed char value to write. * * @throws IOException if an I/O error is encountered. */ virtual void writeChar(char value) = 0; /** * Writes an int to the underlying output stream as four bytes, high * byte first. If no exception is thrown, the counter written is * incremented by 4. * * @param value * The signed integer value to write. * * @throws IOException if an I/O error is encountered. */ virtual void writeInt(int value) = 0; /** * Writes an 64 bit long to the underlying output stream as eight * bytes, high byte first. If no exception is thrown, the counter * written is incremented by 8. * * @param value * The signed 64bit long value to write. * * @throws IOException if an I/O error is encountered. */ virtual void writeLong(long long value) = 0; /** * Converts the float argument to an int using the floatToIntBits * method in class Float, and then writes that int value to the * underlying output stream as a 4-byte quantity, high byte first. * If no exception is thrown, the counter written is incremented * by 4. * * @param value * The 32bit floating point value to write. * * @throws IOException if an I/O error is encountered. */ virtual void writeFloat(float value) = 0; /** * Converts the double argument to a long using the doubleToLongBits * method in class Double, and then writes that long value to the * underlying output stream as an 8-byte quantity, high byte first. * If no exception is thrown, the counter written is incremented * by 8. * * @param value * The 64bit double value to write. * * @throws IOException if an I/O error is encountered. */ virtual void writeDouble(double value) = 0; /** * Writes out the string to the underlying output stream as a * sequence of bytes. Each character in the string is written out, * in sequence, by discarding its high eight bits. If no exception * is thrown, the counter written is incremented by the length of * value. The value written does not include a trailing null as that * is not part of the sequence of bytes, if the null is needed, then use * the writeChars method. * * @param value * The vector of bytes to write. * * @throws IOException if an I/O error is encountered. */ virtual void writeBytes(const std::string& value) = 0; /** * Writes a string to the underlying output stream as a sequence of * characters. Each character is written to the data output stream * as if by the writeChar method. If no exception is thrown, the * counter written is incremented by the length of value. The trailing * NULL character is written by this method. * * @param value * The string value to write as raw bytes. * * @throws IOException if an I/O error is encountered. */ virtual void writeChars(const std::string& value) = 0; /** * Writes out the string to the underlying output stream as a modeified UTF-8 * encoded sequence of bytes. The first two bytes written are indicate its * encoded length followed by the rest of the string's characters encoded as * modified UTF-8. The length represent the encoded length of the data not the * actual length of the string. * * @param value * The string value value to write as modified UTF-8. * * @throws IOException if an I/O error is encountered. * @throws UTFDataFormatException if the encoded size if greater than 65535 */ virtual void writeUTF(const std::string& value) = 0; }; }} #endif /* _DECAF_IO_DATAOUTPUT_H_ */