00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef INCL_PLDATASNK
00013 #define INCL_PLDATASNK
00014
00015 #include "plexcept.h"
00016 #include "plpaintlibdefs.h"
00017
00018 #include <stdio.h>
00019
00025 class PLDataSink : public PLObject
00026 {
00027
00028
00029 friend class PLTIFFEncoder;
00030 friend class PLTIFFEncoderEx;
00031
00032 public:
00034 void Open
00035 ( const char* pszName,
00036 PLBYTE* pData,
00037 size_t MaxDataSize
00038 );
00039
00041 virtual void Close
00042 ();
00043
00045 char* GetName
00046 ();
00047
00049 PLBYTE* GetBufferPtr
00050 ();
00051
00053 size_t GetDataSize
00054 ();
00055
00057 size_t GetMaxDataSize
00058 ();
00059
00061 size_t WriteNBytes
00062 ( size_t n,
00063 PLBYTE* pData
00064 );
00065
00066 void WriteByte
00067 ( PLBYTE Data
00068 );
00069
00071 void Skip
00072 ( size_t n );
00073
00075 void CheckEOF
00076 ();
00077
00078 protected:
00079 PLBYTE* m_pStartData;
00080 int m_nCurPos;
00081
00083 PLDataSink
00084 ();
00085
00087 virtual ~PLDataSink
00088 ();
00089
00090 private:
00091 char* m_pszName;
00092 size_t m_nMaxFileSize;
00093 };
00094
00095
00096 inline PLBYTE * PLDataSink::GetBufferPtr
00097 ()
00098 {
00099 return m_pStartData + m_nCurPos;
00100 }
00101
00102 inline size_t PLDataSink::GetMaxDataSize
00103 ()
00104 {
00105 return m_nMaxFileSize;
00106 }
00107
00108 inline size_t PLDataSink::GetDataSize
00109 ()
00110 {
00111
00112 return m_nCurPos;
00113 }
00114
00115 inline void PLDataSink::CheckEOF
00116 ()
00117 {
00118
00119 if (m_nCurPos > (int)m_nMaxFileSize)
00120 {
00121 throw PLTextException (PL_ERREND_OF_FILE,
00122 "Buffer overflow while encoding.\n");
00123 }
00124 }
00125
00126 inline void PLDataSink::Skip
00127 ( size_t n )
00128 {
00129
00130 m_nCurPos += n;
00131 CheckEOF ();
00132 }
00133
00134 #endif // INCL_PLDATASNK
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165