Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef AbstractOutputStreamH
00033 #define AbstractOutputStreamH
00034
00035 #include <zeusbase/System/Interfaces/IOutputStream.hpp>
00036 #include <zeusbase/System/ZObject.h>
00037
00038 BEGIN_NAMESPACE_Zeus
00039
00040
00042 #define WRITE_PRIMITIVE_DATA(check, data_type, data) \
00043 Retval retValue = RET_REQUEST_FAILED; \
00044 if (check) \
00045 { \
00046 char* pBuffer = (char*)&data; \
00047 this->write(pBuffer, sizeof(data_type)); \
00048 retValue = RET_NOERROR; \
00049 } \
00050 return retValue;
00051
00052
00054 #define WRITE_STRING_DATA(check, rData) \
00055 Retval retValue = RET_REQUEST_FAILED; \
00056 if (check) \
00057 { \
00058 Int iStringSize = rData.getSize()+1; \
00059 Int iBufferSize = iStringSize * 2; \
00060 this->writeInt32(iStringSize); \
00061 TArrayPtr<char> ptrData(new char[iBufferSize], iBufferSize); \
00062 for (Int i = 0, j = 0; i < iBufferSize; i += 2, j++) \
00063 { \
00064 wchar_t wcC1 = rData.getChar(j); \
00065 ptrData[i] = static_cast<char>(0x00FF & wcC1); \
00066 ptrData[i+1] = static_cast<char>(0x00FF & (wcC1 >> 8)); \
00067 } \
00068 this->write(ptrData.getPointer(), ptrData.getSize()); \
00069 retValue = RET_NOERROR; \
00070 } \
00071 return retValue;
00072
00073
00075 #define WRITE_ARRAY_DATA(check, rData) \
00076 Retval retValue = RET_REQUEST_FAILED; \
00077 if (check) \
00078 { \
00079 if (this->writeInt32(rData.getCount()) == RET_NOERROR && \
00080 this->write(rData.getArray(), rData.getCount()) == RET_NOERROR) \
00081 { \
00082 retValue = RET_NOERROR; \
00083 } \
00084 } \
00085 return retValue;
00086
00087
00090
00091 zeusbase_class TAbstractOutputStream : public TZObject, public IOutputStream
00092 {
00093 public:
00094 TAbstractOutputStream();
00095
00096 bool MQUALIFIER available() const;
00097
00098
00099 virtual Retval MQUALIFIER write(const char* pBuffer, Int iBufferSize)=0;
00100 virtual Retval MQUALIFIER writeInt8(char cData)=0;
00101 virtual void MQUALIFIER close()=0;
00102 virtual void MQUALIFIER flush()=0;
00103
00104
00105 virtual Retval MQUALIFIER writeInt16(Int16 sData);
00106 virtual Retval MQUALIFIER writeInt32(Int32 lData);
00107 virtual Retval MQUALIFIER writeInt64(const Int64& rldData);
00108 virtual Retval MQUALIFIER writeUint8(Uint8 ucData);
00109 virtual Retval MQUALIFIER writeUint16(Uint16 usData);
00110 virtual Retval MQUALIFIER writeUint32(Uint32 ulData);
00111 virtual Retval MQUALIFIER writeUint64(const Uint64& ruldData);
00112 virtual Retval MQUALIFIER writeFloat32(Float32 fData);
00113 virtual Retval MQUALIFIER writeFloat64(const Float64& rdData);
00114 virtual Retval MQUALIFIER writeBool(bool bData);
00115 virtual Retval MQUALIFIER writeArray(const IByteArray& rData);
00116 virtual Retval MQUALIFIER writeString(const IString& rData);
00117
00118
00119 MEMORY_MANAGER_DECL
00120
00121 protected:
00122 virtual ~TAbstractOutputStream();
00123
00125 bool m_bOpen;
00127 bool m_bAvailable;
00128
00129 private:
00130
00131 };
00132
00133
00134
00137
00138 inline bool MQUALIFIER TAbstractOutputStream::available() const
00139 { return m_bAvailable; }
00140
00141
00144
00145 inline Retval MQUALIFIER TAbstractOutputStream::writeUint8(Uint8 ucData)
00146 {
00147 return writeInt8(static_cast<Int8>(ucData));
00148 }
00149
00150
00153
00154 inline Retval MQUALIFIER TAbstractOutputStream::writeUint16(Uint16 usData)
00155 {
00156 return writeInt16(static_cast<Int16>(usData));
00157 }
00158
00159
00162
00163 inline Retval MQUALIFIER TAbstractOutputStream::writeUint32(Uint32 ulData)
00164 {
00165 return writeInt32(static_cast<Int32>(ulData));
00166 }
00167
00168
00171
00172 inline Retval MQUALIFIER TAbstractOutputStream::writeUint64(const Uint64& ruldData)
00173 {
00174 return writeInt64(static_cast<Int64>(ruldData));
00175 }
00176
00177 END_NAMESPACE_Zeus
00178
00179 #endif