134
140
// --------------------------------------------------------------------
136
class IPE_EXPORT IpeStream {
138
//! Virtual destructor, so you can delete using a pointer to IpeStream
139
virtual ~IpeStream();
140
//! Output character.
141
virtual void PutChar(char ch) = 0;
143
virtual void PutString(IpeString s) = 0;
145
virtual void PutCString(const char *s) = 0;
146
//! Output raw character data.
147
virtual void PutRaw(const char *data, int size) = 0;
148
//! Output character.
149
inline IpeStream &operator<<(char ch) { PutChar(ch); return *this; }
151
inline IpeStream &operator<<(const IpeString &s) {
152
PutString(s); return *this; }
154
inline IpeStream &operator<<(const char *s) { PutCString(s); return *this; }
155
IpeStream &operator<<(int i);
156
IpeStream &operator<<(double d);
157
void PutHexByte(char b);
158
void PutXmlString(IpeString s);
161
class IPE_EXPORT IpeStringStream : public IpeStream {
163
IpeStringStream(IpeString &string);
164
virtual void PutChar(char ch);
165
virtual void PutString(IpeString s);
166
virtual void PutCString(const char *s);
167
virtual void PutRaw(const char *data, int size);
172
class IPE_EXPORT IpeFileStream : public IpeStream {
174
IpeFileStream(std::FILE *file);
175
virtual void PutChar(char ch);
176
virtual void PutString(IpeString s);
177
virtual void PutCString(const char *s);
178
virtual void PutRaw(const char *data, int size);
142
class IPE_EXPORT IpeFixed {
144
explicit IpeFixed(int val) : iValue(val * 1000) { /* nothing */ }
145
explicit IpeFixed() { /* nothing */ }
146
inline static IpeFixed FromInternal(int val);
147
inline int ToInt() const { return iValue / 1000; }
148
inline double ToDouble() const { return iValue / 1000.0; }
149
inline int Internal() const { return iValue; }
150
IpeFixed Mult(int a, int b) const;
154
friend IpeStream &operator<<(IpeStream &stream, const IpeFixed &f);
157
// --------------------------------------------------------------------
183
159
class IPE_EXPORT IpeLex {
251
230
// --------------------------------------------------------------------
232
class IPE_EXPORT IpeStream {
234
//! Virtual destructor, so you can delete using a pointer to IpeStream
235
virtual ~IpeStream();
236
//! Output character.
237
virtual void PutChar(char ch) = 0;
238
//! Close the stream. No more writing allowed!
239
virtual void Close();
241
virtual void PutString(IpeString s);
243
virtual void PutCString(const char *s);
244
//! Output raw character data.
245
virtual void PutRaw(const char *data, int size);
246
//! Output character.
247
inline IpeStream &operator<<(char ch) { PutChar(ch); return *this; }
249
inline IpeStream &operator<<(const IpeString &s) {
250
PutString(s); return *this; }
252
inline IpeStream &operator<<(const char *s) { PutCString(s); return *this; }
253
IpeStream &operator<<(int i);
254
IpeStream &operator<<(double d);
255
void PutHexByte(char b);
256
void PutXmlString(IpeString s);
259
/*! \class IpeTellStream
261
\brief Adds position feedback to IpeStream.
264
class IPE_EXPORT IpeTellStream : public IpeStream {
266
virtual int Tell() const = 0;
269
class IPE_EXPORT IpeStringStream : public IpeTellStream {
271
IpeStringStream(IpeString &string);
272
virtual void PutChar(char ch);
273
virtual void PutString(IpeString s);
274
virtual void PutCString(const char *s);
275
virtual void PutRaw(const char *data, int size);
276
virtual int Tell() const;
281
class IPE_EXPORT IpeFileStream : public IpeTellStream {
283
IpeFileStream(std::FILE *file);
284
virtual void PutChar(char ch);
285
virtual void PutString(IpeString s);
286
virtual void PutCString(const char *s);
287
virtual void PutRaw(const char *data, int size);
288
virtual int Tell() const;
293
// --------------------------------------------------------------------
295
class IPE_EXPORT IpeDataSource {
297
virtual ~IpeDataSource() = 0;
298
//! Get one more character, or EOF.
299
virtual int GetChar() = 0;
302
class IPE_EXPORT IpeFileSource : public IpeDataSource {
304
IpeFileSource(std::FILE *file);
305
virtual int GetChar();
310
class IPE_EXPORT IpeBufferSource : public IpeDataSource {
312
IpeBufferSource(const IpeBuffer &buffer);
313
virtual int GetChar();
315
const IpeBuffer &iBuffer;
319
inline IpeFixed IpeFixed::FromInternal(int val)
326
inline IpeStream &operator<<(IpeStream &stream, const IpeFixed &f)
328
stream << (f.iValue / 1000);
329
if (f.iValue % 1000) {
330
stream << "." << ((f.iValue / 100) % 10);
331
if (f.iValue % 100) {
332
stream << ((f.iValue / 10) % 10);
334
stream << (f.iValue % 10);
340
// --------------------------------------------------------------------